我试图对我的项目使用快速排序,但它不起作用。我无法弄清楚bug的位置。有谁可以帮我搞清楚吗?谢谢。
void quicksort(int arr[],int a, int b){
if(a<=b){
int key=arr[a];
int index=a;
int i=a, j=b;
while(i<=j){
for(;arr[j]>key;--j);
int temp=arr[j];
arr[j]=key;
arr[index]=temp;
index=j;
for(;arr[i]<key;++i);
temp=arr[i];
arr[i]=key;
arr[index]=temp;
index=i;
}
quicksort(arr,a,index);
quicksort(arr,index,b);
}
else return;
}
答案 0 :(得分:5)
你的内循环是这样的:
key
左侧的元素。key
的{{1}}交换,并将index
更新为index
的新位置key
右侧的元素。key
的{{1}}交换,并将key
更新为index
的新位置为什么世界上你想要这样做?你应该这样做:
index
左侧的元素。key
右侧的元素。我不是百分百肯定,但我认为在你的快速排序版本中改变key
可能是你问题的罪魁祸首。找出答案的最佳方法是逐步调试代码,看看它出错的地方。
以下是根据我的建议实施的实施,以及一些测试用例:
key
答案 1 :(得分:2)
C已经附带快速排序的qsort功能。
答案 2 :(得分:1)
为什么呢?
arr[j]=key;
因为你应该只在枢轴位置放置一次枢轴
并致电
quicksort(arr,a,index);
quicksort(arr,index,b);
也有气味,因为你有相同的低和高指数。
从谷歌查看关于qucksort的精彩视频(包括大量代码和说明)