[問題]簡單致極的quicksort

看板Programming作者 (不要想啦)時間16年前 (2009/04/07 01:53), 編輯推噓5(501)
留言6則, 2人參與, 最新討論串1/1
卻跑出來結果不合..... 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

04/07 06:02, , 1F
剩下只有兩個 element 時再把 pivot 跟
04/07 06:02, 1F

04/07 06:03, , 2F
a[j] 交換會出問題, 因為這個 a[j] 其實
04/07 06:03, 2F

04/07 06:03, , 3F
可能把 pivot 還大
04/07 06:03, 3F

04/07 06:03, , 4F
可能"比"
04/07 06:03, 4F

04/07 06:29, , 5F
看來把 loop conditoin 改成後置即可
04/07 06:29, 5F

04/07 09:05, , 6F
謝謝你 一語道破 完全命中 :)
04/07 09:05, 6F
文章代碼(AID): #19sa6kAo (Programming)