作者Dsigma (不要想啦)
看板Programming
标题[问题]简单致极的quicksort
时间Tue Apr 7 01:53:49 2009
却跑出来结果不合..... Orz..怎麽会这样勒
这可是照原书上范例写的 我除错除到爆炸 却怎麽都找不到错误 :(
请大家帮忙点一下 就好 谢谢
void quicksort(int a[], int low, int high)
{
int mid,i,pivot;
if(low<high) {
mid=partition(a,low,high);
quicksort(a,low,mid-1);
quicksort(a,mid+1,high);
}
int partition(int a[], int low , int high ) {
int i,j,pivot,temp;
i=low+1;
j=high;
pivot=a[low];
while(i<j) {
while((i<j)&&(a[i]<=pivot)) { i++;}
while((i<=j)&&(a[j]>pivot)) {j--;}
if(i<j) {
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
a[low]=a[j];
a[j]=pivot;
return j; }
void main(void)
{
int i;
int a[10]= {12,32,34,65,91,4,54,28,123,5}; //测试数据
quicksort(a,0,9); // 呼叫快速排序
for(i=0;i<=9;i++) // 印出结果
printf("%d\n",a[i]);
}
以下是输出结果: 十分恼人的 5一直排在前面= =''怎麽会这样勒~~
5
4
12
28
32
54
34
65
91
123
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.42.12.235
1F:推 march20:剩下只有两个 element 时再把 pivot 跟 128.54.20.28 04/07 06:02
2F:推 march20:a[j] 交换会出问题, 因为这个 a[j] 其实 128.54.20.28 04/07 06:03
3F:推 march20:可能把 pivot 还大 128.54.20.28 04/07 06:03
4F:推 march20:可能"比" 128.54.20.28 04/07 06:03
5F:推 march20:看来把 loop conditoin 改成後置即可 128.54.20.28 04/07 06:29
6F:→ Dsigma:谢谢你 一语道破 完全命中 :) 114.42.12.235 04/07 09:05