我們來分析一下快速排序法的效能。快速排序的時間效能取決於快速排序遞迴的深度,可以用遞迴樹來描述遞迴演算法的執**況。如圖9‐9‐7所示,它是在快速排序過程中的遞迴過程。由於我們的第乙個關鍵字是50,正好是待排序的序列的中間值,因此遞迴樹是平衡的,此時效能也比較好。
圖9-9-7
在最優情況下,partition每次都劃分得很均勻,如果排序n個關鍵字,其遞迴樹的深度就為.log2n.+1(.x.表示不大於x的最大整數),即僅需遞迴log2n次,需要時間為t(n)的話,第一次partiation應該是需要對整個陣列掃瞄一遍,做n次比較。然後,獲得的樞軸將陣列一分為二,那麼各自還需要t(n/2)的時間(注意是最好情況,所以平分兩半)。於是不斷地劃分下去,我們就有了下面的不等式推斷。
t(n)≤2t(n/2) +n,t(1)=0也就是說,在最優的情況下,快速排序演算法的時間複雜度為o(nlogn)。t(n)≤2(2t(n/4)+n/2) +n=
4t(n/4)+2n
t(n)≤4(2t(n/8)+n/4) +2n=
8t(n/8)+3n
……
t(n)≤nt(1)+(log2n)×n=
o(nlogn)
在最壞的情況下,待排序的序列為正序或者逆序,每次劃分只得到乙個比上一次劃分少乙個記錄的子串行,注意另乙個為空。如果遞迴樹畫出來,它就是一棵斜樹。此時需要執行n‐1次遞迴呼叫,且第i次劃分需要經過n‐i次關鍵字的比較才能找到第i個記錄,也就是樞軸的位置,因此比較次數為
平均的情況,設樞軸的關鍵字應該在第k的位置(1≤k≤n),那麼:
由數學歸納法可證明,其數量級為o(nlogn)。
就空間複雜度來說,主要是遞迴造成的棧空間的使用,最好情況,遞迴樹的深度為log2n,其空間複雜度也就為o(logn),最壞情況,需要進行n‐1遞迴呼叫,其空間複雜度為o(n),平均情況,空間複雜度也為o(logn)。
可惜的是,由於關鍵字的比較和交換是跳躍進行的,因此,快速排序是一種不穩定的排序方法。
最好,最壞,平均時間複雜度分析
例子1public static intfind int array,int n,int x return pos 分析例子1的時間複雜度 例1的主要實現在for迴圈中的array i 上。他的時間複雜度就是來自for迴圈 所以他的時間複雜度就是o n n就是陣列的長度。但是經常有時是,不需要將所有...
演算法 最好 最壞 平均複雜度
注 本文僅為筆記。原文 極客時間 資料結構與演算法之美 04 複雜度分析 下 最好 最壞 平均 均攤時間複雜度 略,比較容易分析。需考慮概率來計算。概率論中的加權平均值,也叫作期望值,所以平均時間複雜度的全稱應該叫加權平均時間複雜度或者期望時間複雜度。均攤時間複雜度及對應的攤還分析法。對乙個資料結構...
演算法 最好 最壞 平均複雜度
注 本文僅為筆記。原文 極客時間 資料結構與演算法之美 04 複雜度分析 下 最好 最壞 平均 均攤時間複雜度 略,比較容易分析。需考慮概率來計算。概率論中的加權平均值,也叫作期望值,所以平均時間複雜度的全稱應該叫加權平均時間複雜度或者期望時間複雜度。均攤時間複雜度及對應的攤還分析法。對乙個資料結構...