排序 交換排序 快速排序 (四)

2022-03-05 06:13:19 字數 1575 閱讀 4607

6、演算法分析

快速排序的時間主要耗費在劃分操作上,對長度為k的區間進行劃分,共需k-1次關鍵字的比較。

(1)最壞時間複雜度

最壞情況是每次劃分選取的基準都是當前無序區中關鍵字最小(或最大)的記錄,劃分的結果是基準左邊的子區間為空(或右邊的子

區間為空),而劃分所得的另乙個非空的子區間中記錄數目,僅僅比劃分前的無序區中記錄個數減少乙個。

因此,快速排序必須做n-1次劃分,第i次劃分開始時區間長度為n-i+1,所需的比較次數為n-i(1≤i≤n-1),故總的比較次數達

到最大值:

c max = n(n-1)/2=o(n 2 )

如果按上面給出的劃分演算法,每次取當前無序區的第1個記錄為基準,那麼當檔案的記錄已按遞增序(或遞減序)排列時,每次劃分

所取的基準就是當前無序區中關鍵字最小(或最大)的記錄,則快速排序所需的比較次數反而最多。

(2) 最好時間複雜度

在最好情況下,每次劃分所取的基準都是當前無序區的"中值"記錄,劃分的結果是基準的左、右兩個無序子區間的長度大致相等

。總的關鍵字比較次數:

0(nlgn)

注意:用遞迴樹來分析最好情況下的比較次數更簡單。因為每次劃分後左、右子區間長度大致相等,故遞迴樹的高度為o(lgn),而遞迴

樹每一層上各結點所對應的劃分過程中所需要的關鍵字比較次數總和不超過n,故整個排序過程所需要的關鍵字比較總次數

c(n)=o(nlgn)。

因為快速排序的記錄移動次數不大於比較的次數,所以快速排序的最壞時間複雜度應為0(n 2 ),最好時間複雜度為o(nlgn)。

(3)基準關鍵字的選取

在當前無序區中選取劃分的基準關鍵字是決定演算法效能的關鍵。

①"三者取中"的規則

"三者取中"規則,即在當前區間裡,將該區間首、尾和中間位置上的關鍵字比較,取三者之中值所對應的記錄作為基準,在劃分

開始前將該基準記錄和該區伺的第1個記錄進行交換,此後的劃分過程與上面所給的partition演算法完全相同。

②取位於low和high之間的隨機數k(low≤k≤high),用r[k]作為基準

選取基準最好的方法是用乙個隨機函式產生乙個取位於low和high之間的隨機數k(low≤k≤high),用r[k]作為基準,這相當於

強迫r[low..high]中的記錄是隨機分布的。用此方法所得到的快速排序一般稱為隨機的快速排序。具體演算法【參見教材】

注意:隨機化的快速排序與一般的快速排序演算法差別很小。但隨機化後,演算法的效能大大地提高了,尤其是對初始有序的檔案,一般不

可能導致最壞情況的發生。演算法的隨機化不僅僅適用於快速排序,也適用於其它需要資料隨機分布的演算法。

(4)平均時間複雜度

儘管快速排序的最壞時間為o(n 2 ),但就平均效能而言,它是基於關鍵字比較的內部排序演算法中速度最快者,快速排序亦因此

而得名。它的平均時間複雜度為o(nlgn)。

(5)空間複雜度

快速排序在系統內部需要乙個棧來實現遞迴。若每次劃分較為均勻,則其遞迴樹的高度為o(lgn),故遞迴後需棧空間為o(lgn)。

最壞情況下,遞迴樹的高度為o(n),所需的棧空間為o(n)。

(6)穩定性

快速排序是非穩定的,例如[2, 2 ,1]。

交換排序 快速排序

快速排序 quick sort 也是一種交換排序,它在排序中採取了分治策略。從待排序列中選取一元素作為軸值 也叫主元 將序列中的剩餘元素以該軸值為基準,分為左右兩部分。左部分元素不大於軸值,右部分元素不小於軸值。軸值最終位於兩部分的分割處。對左右兩部分重複進行這樣的分割,直至無可分割。從快速排序的演...

交換排序 快速排序

簡述 快速排序可以說算是針對氣泡排序的一種優化,氣泡排序是順序交換,這樣交換次數順序增長。如果我們做跳躍的交換,那麼可以使得交換次數也是跳躍性,會有所降低 演算法思想 找出乙個樞軸,用於做比較交換,並記下後用。一般用第乙個 用第 一 中間 最後三個取中後來效果會更好 定乙個高位 high和底位 lo...

交換排序 氣泡排序,快速排序

交換排序 氣泡排序,快速排序 執行環境 vs2010 include include include include define ok 1 define true 1 define false 0 define maxsize 50 typedef struct redtype typedef s...