高速排序 與 隨機高速排序 演算法分析

2021-09-07 10:37:17 字數 1346 閱讀 9589

高速排序是由東尼·霍爾所發展的一種排序演算法。

在平均狀況下,排序 n 個專案要ο(n log n)次比較。在最壞狀況下則須要ο(n2)次比較,但這樣的狀況並不常見。其實,高速排序通常明顯比其它ο(n log n) 演算法更快,由於它的內部迴圈(inner loop)能夠在大部分的架構上非常有效率地被實現出來。

高速排序的長處:

(1)原址排序。空間複雜度較小。

(2)儘管最壞情況下(有序陣列)時間複雜度為 (n*n),可是平均效能非常好,期望複雜度為( nlg(n) )。

高速排序使用分治法(divide and conquer)策略來把乙個序列(list)分為兩個子串行(sub-lists)

步驟為:

(1)從數列中挑出乙個元素,稱為 "基準"(pivot),

(2)又一次排序數列,全部元素比基準值小的擺放在基準前面,全部元素比基準值大的擺在基準的後面(同樣的數能夠到任一邊)。

在這個分割槽退出之後。該基準就處於數列的   中間位置。這個稱為分割槽(partition)操作。

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

高速排序 與 隨機高速排序的唯一差別就是:高速排序始終將陣列最後乙個元素作為基準。而隨機高速排序是從陣列中隨機挑選乙個元素和最後乙個元素交換位置後。作為基準。隨機高速排序基準的選擇更能適應大規模隨機資料的高速排序。

(隨機高速排序演算法)

高速排序源**:

幾個高速排序演算法

鴿巢排序,排序位元組串 寬位元組串最快的排序演算法,計數排序的變種 將計數緩衝區大小固定,少一次遍歷開銷 速度是stl中std sort的20多倍,更重要的是實現極其簡單!缺點是需要乙個size至少等於待排序陣列取值範圍的緩衝區,不適合int等大範圍資料 c c code void pigeonho...

C 高速排序演算法

根據網上看到的高速排序演算法介紹,進行的 實現。目前的 還是比較粗糙和繁瑣的,等待後續改進 下面的文字介紹部分 於 一 高速排序演算法的基本特性 時間複雜度 o nlgn 最壞 o n 2 空間複雜度 o nlgn 不穩定。高速排序是一種排序演算法,對包括n個數的輸入陣列,平均時間為o nlgn 最...

高速排序演算法C 實現

quick sort stl中也有現成的高速排序演算法。內部實現採用了下面技巧 1 樞軸的選擇採取三數取中的方式 2 後半段採取迴圈的方式實現 3 高速排序與插入排序結合 include include includeusing namespace std 這一版本號是最簡單實現版本號。對於高速排序...