快速排序--學習筆記

快速排序–學習筆記

快速排序過程:

【示例】:

初始關鍵字 [49 38 65 97 76 13 27 49]
一趟排序之後 [27 38 13] 49 [76 97 65 49]
二趟排序之後 [13] 27 [38] 49 [49 65]76 [97]
三趟排序之後 13 27 38 49 49 [65]76 97
最後的排序結果 13 27 38 49 49 65 76 97
各趟排序之後的狀態
*/

//通俗的說,快速排序是選取一個基準元素R,將待排序的數組中的元素與它比較,大於等於它的元素放在它之後,
//小於等於它的放在它之前,在它的左邊都是小於等於它的元素,右邊都是大於等於它的元素
//繼續在R左,R右兩個待排序的區域進行上述的操作,取一個基準元素S一直操作,直到待排序的區域元素全部拍好序爲止
//算法是:1)設置兩個變量I、J,排序開始的時候:I=0,J=N-1;
//2)以第一個數組元素作爲關鍵數據,賦值給key,即 key=A[0];
//3)從J開始向前搜索,即由後開始向前搜索(J=J-1),找到第一個小於key的值A[J],並與key交換;
//4)從I開始向後搜索,即由前開始向後搜索(I=I+1),找到第一個大於key的A[I],與key交換;
//5)重複第3、4、5步,直到 I=J; (3,4步是在程序中沒找到時候j=j-1,i=i+1,直至找到爲止。

public class demo {

    public void sort(Integer[] intgArr, int low, int high) {

        quickSort(intgArr,low,high);
    } 

    private int quickSort(Integer[] intgArr, int low, int high) {

        int pivot=low;
        while (true) {

            if (pivot!=high) {

                if (intgArr[high].compareTo(intgArr[pivot])<0) {
                    swap(intgArr, high, pivot);
                    pivot=high;
                }else {
                    high--;
                }

            }else {
                if (intgArr[low].compareTo(intgArr[pivot])>0) {
                    swap(intgArr, low, pivot);
                    pivot=low;
                }else {
                    low++;
                }


            }

            if (low==high) {
                break;
            }


        }
        return pivot;
    }

    public void swap(Integer[] array, int i, int j) {   
        if (i != j) {//只有不是同一位置時才需交換   
            Integer tmp = array[i];   
            array[i] = array[j];   
            array[j] = tmp;   
        }   
    } 

    /**   
     * 測試   
     * @param args   
     */  
    public static void main(String[] args) {   
        Integer[] intgArr = { 5, 9, 1, 4, 2, 6, 3, 8, 0, 7 };  
        demo quicksort = new demo();   
        quicksort.sort(intgArr,0,intgArr.length-1);
        for(Integer intObj:intgArr){
            System.out.print(intObj + " ");
        }
    }



}
發佈了31 篇原創文章 · 獲贊 22 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章