1. 問題定義
輸入:s = ;
輸出: 排序的s。
2. 隨機演算法
基本思想:採用隨機抽樣的方法確定集合的劃分點,然後把集合劃分為兩個子集合,分別遞迴地在每個子集合上使用隨機排序演算法。演算法步驟如下:
1. 均勻等可能地在s中隨機選取乙個樣本y;
2. 比較s中的每個元素,把s劃分成兩個集合:s1 = ;
3. 遞迴地排序s1, s2;
4. 順序地輸出排序的s1, y, s2.
3. 演算法效能的分析
定義隨機變數xij表示s中第i個元素與第j個元素比較的次數(取值1或者0),那麼演算法比較的總次數為sum(xij),演算法的平均複雜性為e(sum(xij)),也可寫為sum(e(xij))。假設pij表示si和sj在進行中進行比較的概率,則e|xij| = 1 * pij + 0 *(1 - pij) = pij。因此關鍵問題是分析如何求解pij。
演算法設計 快速排序 隨機快速排序演算法
1.演算法流程 快速排序的時間複雜性分析 1.最壞情況劃分 當劃分產生的兩個子問題分別包含了n 1個元素和0個元素時,快速排序是最壞情況,假如每次遞迴呼叫,總是出現最不平衡劃分,這是最不平衡劃分。劃分操作時間複雜度為 n 則演算法執行時間的遞迴表示式為t n t n 1 t 0 n 利用代入法可以求...
隨機的快速排序演算法
僅僅在原來的快速排序基礎上增加了取隨機數為劃分點,改進了原有快排使用第乙個元素作為劃分元素的缺點,即減少了遇到最壞情況的可能。include include using namespace std define n 20 最大陣列個數 define multiplier 0x015a4e35l de...
經典快速排序演算法與隨機快速排序演算法
快速排序用到了分治思想,同樣的還有歸併排序。乍看起來快速排序和歸併排序非常相似,都是將問題變小,先排序子串,最後合併。不同的是快速排序在劃分子問題的時候經過多一步處理,將劃分的兩組資料劃分為一大一小,這樣在最後合併的時候就不必像歸併排序那樣再進行比較。但也正因為如此,劃分的不定性使得快速排序的時間複...