快速排序基本思想
快速排序(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;
}