クイックソートで少し穴があいています

811 ワード

まずコードを見て
//  
    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つが等しい場合はデッドサイクルに入る.