快速排序QuickSort

原理:對於給定的一組記錄,選擇一個基準元素,通常選擇第一個元素或者最後一個元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,然後再用同樣的方法遞歸地排序劃分的兩部分,直到序列中的所有記錄均有序爲止。

代碼:


public class QuickSort {
    public static void sort(int a[], int low, int hight) {
        int i, j, index;
        if (low > hight) {
            return;
        }
        i = low;
        j = hight;
        index = a[i]; // 用子表的第一個記錄做基準
        while (i < j) { // 從表的兩端交替向中間掃描
            while (i < j && a[j] >= index)
                j--;
            if (i < j){
                a[i] = a[j];// 用比基準小的記錄替換低位記錄
                i++;
            }
           
            while (i < j && a[i] < index)
                i++;
            if (i < j){ // 用比基準大的記錄替換高位記錄
                a[j] = a[i];
                j--;
            }
            
        }
        a[i] = index;// 將基準數值替換回 a[i]
        sort(a, low, i - 1); // 對低子表進行遞歸排序
        sort(a, i + 1, hight); // 對高子表進行遞歸排序

    }

    public static void quickSort(int a[]) {
        sort(a, 0, a.length - 1);
    }

    public static void main(String[] args) {

        int a[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
        quickSort(a);
        System.out.println(Arrays.toString(a));
    }
}

 

原數組: int a[] = { 49, 38, 65, 97, 76, 13, 27, 49 };

第一次排序後:[27, 38, 13, 49, 76, 97, 65, 49]

之後遞歸49之前數組 與 49之後數組

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