我做了一个快速排序算法,在我看到的youtube中的算法的可视化表示之外,但是我的递归根本不起作用。 :(如果我注释掉这两条线,快速排序算法(递归)
quicksort(array,0,start-1);
quicksort(array,start+1,temp);
。该程序不会崩溃,输出变为2,1,3,5,4这部分是正确的。但是,当它进入崩溃。递归整个while循环后,开始变得与结束..
#include <stdio.h>
#include <conio.h>
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
void quicksort(int *array, int start, int end){
int pivot = start;
int temp = end;
while(start != end){
if(pivot==start){
if(array[pivot] > array[end]){
swap(&array[end],&array[pivot]);
pivot = end;
start++;
}
else
end--;
}
else{
if(array[pivot] < array[start]){
swap(&array[start],&array[pivot]);
pivot = start;
end--;
}
else
start++;
}
}
quicksort(array,0,start-1);
quicksort(array,start+1,temp);
}
main(){
int x[5] = {3,1,5,2,4};
int i;
quicksort(x,0,4);
for(i=0;i<5;i++)
printf("%d ", x[i]);
getch();
}
我提出的代码的修改.. 我添加如果(开始==结束)返回; //用于终止条件。但是当它进入快速排序(array,start + 1,temp)的第二个递归时会遇到错误; – Xegara 2012-04-05 10:58:31