作者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
推 march20:剩下只有兩個 element 時再把 pivot 跟 128.54.20.28 04/07 06:02
推 march20:a[j] 交換會出問題, 因為這個 a[j] 其實 128.54.20.28 04/07 06:03
推 march20:可能把 pivot 還大 128.54.20.28 04/07 06:03
推 march20:可能"比" 128.54.20.28 04/07 06:03
推 march20:看來把 loop conditoin 改成後置即可 128.54.20.28 04/07 06:29
→ Dsigma:謝謝你 一語道破 完全命中 :) 114.42.12.235 04/07 09:05