我写了一个快速排序程序,但是程序最后执行完就一个控制台黑白界面,什么都没有,有哪位大神能帮我解决一下吗?晚生再次谢谢了。。。附图如下
修改两个地方:
①数组下标超了:
QuickSort(A, 0, size);
printarray(A, size);
改为:
QuickSort(A, 0, size-1);
printarray(A, size-1);
②条件判断有点问题:
int Partition(int array[], int left, int right)
{
int centre =array[left];
int i = left+1;
int j = right;
while (1)
{
while (array[i] < centre && i <= right)
i += 1;
while(array[j] > centre && j <= left)
j -= 1;
if (i >= j)
break;
else
myswap(array[i], array[j]);
}
myswap(array[left], array[j]);
return j;
}
改为:
int Partition(int array[], int left, int right)
{
int centre =array[left];
int i = left;
int j = right;
while (i != j)
{
while(array[j] >= centre && j > i)
j -= 1;
while (array[i] <= centre && i < j)
i += 1;
if (i < j)
myswap(array[i], array[j]);
}
myswap(array[left], array[i]);
return j;
}
附上程序//快速排序算法(分治法)
#include
using namespace std;
//交换两数组的值
void myswap(int &A, int &B)
{
int temp;
temp = A;
A = B;
B = temp;
}
//确定分区
int Partition(int array[], int left, int right)
{
int centre =array[left];
int i = left+1;
int j = right;
while (1)
{
while (array[i] < centre && i <= right)
i += 1;
while(array[j] > centre && j <= left)
j -= 1;
if (i >= j)
break;
else
myswap(array[i], array[j]);
}
myswap(array[left], array[j]);
return j;
}
//快速排序
void QuickSort(int array[], int left, int right)
{
if (left < right) {
int m = Partition(array, left, right);
QuickSort(array, left, m - 1);
QuickSort(array, m + 1, right);
}
}
//打印结果
void printarray(int array[], int n)
{
int i;
for( i = 0 ; i < n ; ++i )
cout << array[i] << " " ;
cout << "\n";
}
void main()
{
int A[] = {65, 2, 6, 1, 90, 78, 105, 67, 35, 23, 3, 88, -22};
int size = sizeof(A) / sizeof(int);
QuickSort(A, 0, size);
printarray(A, size);
system("pause");
}