クイックソートで少し穴があいています
811 ワード
まずコードを見て
コードを書くときは、[3,2]など、2つの要素しかない場合の動作を考慮します.
1つ目を参照keyとすると、iとjは2を指すべきであり、そうすると、jはまずループに入り、すなわち右から左に探し、keyより小さい、すなわち2.を見つけ、iも2に進むべきである.
先にiがループに入り、左から右に進むと、間違っています.
次にi,j位置の数がkeyと等しい場合は交換せず,最大1つが等しく,2つが等しい場合はデッドサイクルに入る.
//
private int partition(int[] a,int start,int end){
int key=a[start];
int i=start,j=end;
while(i=key) {j--;}// 2 ,
while (i=end)
return;
int mid=partition(a,start,end);
//
quickSort(a,start,mid-1);
quickSort(a,mid+1,end);
}
public int[] quickSort(int[] a){
quickSort(a,0,a.length-1);
return a;
}
コードを書くときは、[3,2]など、2つの要素しかない場合の動作を考慮します.
1つ目を参照keyとすると、iとjは2を指すべきであり、そうすると、jはまずループに入り、すなわち右から左に探し、keyより小さい、すなわち2.を見つけ、iも2に進むべきである.
先にiがループに入り、左から右に進むと、間違っています.
次にi,j位置の数がkeyと等しい場合は交換せず,最大1つが等しく,2つが等しい場合はデッドサイクルに入る.