【发布时间】:2011-10-02 05:54:25
【问题描述】:
快速排序的以下代码不起作用,我不明白是什么原因。
#include <iostream>
using namespace std;
void exch(int a[],int i,int j){
int s=a[i];
a[i]=a[j];
a[j]=s;
}
int partition(int a[],int l,int h);
void quick(int a[],int l,int h){
if (h<=l) return ;
int j=partition(a,l,h);
quick(a,l,j-1);
quick(a,j+1,h);
}
int partition(int a[],int l,int h){
int i=l-1;
int j=h;
int v=a[l];
while(true){
while( a[++i]<v);
while(a[--j]>v) if (j==i) break;
if (i>=j) break;
exch(a,i,j);
}
exch(a,i,h);
return i;
}
int main(){
int a[]={12,43,13,5,8,10,11,9,20,17};
int n=sizeof(a)/sizeof(int);
quick(a,0,n-1);
for (int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
输出
5 8 9 11 10 17 12 20 13 43
【问题讨论】:
-
您是否尝试单步执行代码以查看哪里出错了?
-
没有作业没有,只是训练和测试算法书籍中的代码
-
我发现通过使用 step into 从调试结果是这个 j -858993460 int 为什么会这样?
-
我已将您的代码翻译成Cython。它仅比
clib的qsort快约2 倍。