快速排序~思考

1. 選取目標值target,其他與之比較,<target放左邊,>target 放右邊

2. 第1輪

        int[] a={2,1,5,6,3,7,9};
        int start=0;
        int end=a.length-1;
        //--------------
        int target=a[start];
        //---------------
            while (a[end]>target){
                end--;
            }
            a[start]=a[end];
            while (a[start]<target){
                start++;
            }
            a[end]=a[start];
3. 第1輪 繼續,相等的話要把target放回去

while (start!=end){
    while (a[end]>target){
        end--;
    }
    a[start]=a[end];
    while (a[start]<target){
        start++;
    }
    a[end]=a[start];
}
a[end]=target;

4. 第1輪繼續 沒有考慮index

int target=a[start];
while (start!=end){
    while (a[end]>target && start<end){
        end--;
    }
    a[start]=a[end];
    while (a[start]<target && start<end){
        start++;
    }
    a[end]=a[start];
}
a[end]=target;

//第一輪結束

5.分段遞歸,方法提出來

public static void sort( int[] a,int start,int end){
    //這裏是最後加的一個判斷
    int tmpStart=start;
    int tmpEnd=end;
    if(tmpStart>=tmpEnd){
        return;
    }

    int target=a[start];
    while (start!=end){
        //最後加的邊界
        while (a[end]>=target && start<end){
            end--;
        }
        a[start]=a[end];
        while (a[start]<target && start<end){
            start++;
        }
        a[end]=a[start];
    }
    a[end]=target;
    //
    for(int t:a){
        System.out.print(t+"\t");
    }
    System.out.println();
    //
    sort(a,tmpStart,end);
    sort(a,end+1,tmpEnd);

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章