java基本排序算法之快速排序

快速排序基本思想

快速排序(Quicksort)是對冒泡排序的一種改進。
通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

時間複雜度分析

  • 最優情況下,快速排序算法的時間複雜度爲O(nLogn);
  • 最壞情況下,待排序的序列爲正序或者逆序,每次劃分只得到一個比上次劃分少一個記錄的子程序,注意另一個爲空。此時需要執行n-1次遞歸調用,且第i次劃分需要經過n-i次關鍵字的比較才能找到第i個記錄,也就是樞軸的位置,最終時間複雜度爲O(n2)。
  • 平均情況下,由數學歸納法可證,其數量級爲O(nlogn)

空間複雜度分析

  • 主要是遞歸造成的棧空間的使用,
  • 最好情況,遞歸樹的深度爲log2n,空間複雜度也就爲O(logn),
  • 最壞情況,需進行n-1遞歸調用,其空間複雜度爲O(n),
  • 平均情況,空間複雜度也爲O(logn).

快速排序是一種不穩定的排序方法

示例代碼

public void QSort(int[] array,int low,int high){
        int pivot;
        if(low<high){
            pivot = Partition(array, low, high);//獲取中間量位置
            QSort(array, low, pivot-1);
            QSort(array, pivot+1, high);
        }
    }

    public static int Partition(int[] array, int low, int high){
        int pivotkey = array[low];
        while(low < high){
            while (low < high && array[high]>=pivotkey)
                high--;
            swap(array, low, high);
            while(low < high && array[low] <= pivotkey)
                low++;
            swap(array, low, high);
        }
        return low;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章