看板 Programming 關於我們 聯絡資訊
卻跑出來結果不合..... 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