數組排序(6)- 快速排序

(一)快速排序算法

    快速排序的基本思想:經過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另外一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。app

  1.算法描述;ide

    (1)從數列中挑出一個元素,稱爲 「基準」(pivot);ui

    (2)從新排序數列,全部元素比基準值小的擺放在基準前面,全部元素比基準值大的擺在基準的後面(相同的數能夠到任一邊)。在這個分區退出以後,該基準就處於數列的中間位置。這個稱爲分區(partition)操做;spa

    (3)遞歸地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。 code

  2.手動模擬排序:blog

  

  3.算法分析:排序

  (1)最佳狀況:平均狀況:T(n) = O(nlogn) 遞歸

  (2)空間複雜度: O(logn)it

  (3)穩定性: 不穩定

(二)代碼實現:

public class QuickSort {
    public static void main(String[] args) {
        int[] arr = {3,4,1,2,7,8,6,5,9};
        sort(arr);//快速排序
        System.out.println("-----------------------------------------");
        print(arr);//打印結果
    }

    public static void sort(int[] arr){
        if(arr == null || arr.length <= 1){
            return;
        }
        sort(arr,0,arr.length - 1);
    }

    private static void sort(int[] arr, int left, int right) {
        //邊界
        if(left >= right){
            return;
        }
        //獲取基數
        int pivot = arr[left];
        int index = partition(arr,left,right);
        sort(arr,left,index - 1);
        sort(arr,index + 1,right);
    }

    private static int partition(int[] arr, int left, int right) {
        int pivot = arr[left];
        while (left < right) {
            while (left < right && arr[right] >= pivot) {
                right--;
            }
            arr[left] = arr[right];
            // arr[left++] = arr[right];
            while (left < right && arr[left] <= pivot) {
                left++;
            }
            // arr[right--] = arr[left];
            arr[right] = arr[left];
        }
        // left == right
        arr[left] = pivot;
        print(arr);
        return left;
    }

    public static void print(int[] arr){
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]);
            if(i != arr.length - 1){
                sb.append(", ");
            }
        }
        System.out.println(sb.append("]"));
    }
}
QuickSort
相關文章
相關標籤/搜索