第三章:查詢與排序(下)----------- 3.22 總結:10種排序演算法的對比分析
總結:10種排序演算法的對比分析:
*基礎排序*:
冒牌排序:
描述:誰大誰上,每一輪都把最大的頂到天花板。
效率太低 O(n²)------掌握swap。
選擇排序:
效率較低,但經常用它內部的內部迴圈方式來找最大值和最小值------怎麼一次性求出陣列的最大值和最小值。 O(n²)
插入排序:
雖然平均效率低,但在序列基本有序時,它很快,所有也有其適用範圍。
希爾排序:
縮小增量排序,是插排的改良,對空間思維的訓練有幫助。O(n的1.3次方)左右。
*分治法*:
1、子問題的拆分;
2、遞迴求解子問題;
3、合併子問題的解。
快速排序:
快速排序是軟體工業中最常見的常規排序法,其雙向指標掃描和分割槽演算法是核心,往往用於解決類似問題,特別地partition演算法用來劃分不同性質的元素,也用於著名的topk問題。
selectK問題。記住。
O(NlgN),如果主元不是中位數,特別地,如果每次主元都在陣列區間的一側,複雜度將退化為n²。
工業優化:三點取中法,絕對中值法,小資料量用插入排序。
快排重視子問題的拆分。
歸併排序:
空間換時間----------逆序對。
歸併排序重視子問題的合併。
堆排序:
用到了二叉堆的資料結構。是掌握樹結構的起手式。
==堆排+二分查詢。
上面三個都是NlgN的複雜度,其中快排表現最好,是原址的,不用開闢輔助空間;堆排也是原址的,但複雜度的常數因子較大,不具備優勢。
上面七種都是基於比較的排序,可證明它們在元素隨機順序情況下最好是NlgN,可用決策樹證明。
下面三個是非比較排序,在**特定情況**下會比基於比較的排序要快:
計數排序:
可以說是最快的:O(N+k),k=maxOf(sourceArr),用它來解決問題時必須注意如果序列中的值,分佈非常廣(最大值很大,元素比較稀疏),空間會浪費很多。
所以計數排序的適用範圍是:**序列的關鍵字比較集中,已知邊界,且邊界較小**(比如:年齡)
桶排序:
先分桶,再用其他排序方法對桶內元素排序,按桶的編號依次檢出。(分配--收集)
用它來解決問題必須注意序列的值是否均勻地分佈在桶中。
如果不均勻,那麼個別桶中的元素會遠多於其他桶,桶內排序用比較排序,極端情況下,全部元素都擠在一個桶裡,還是會退化為NlgN。
其時間複雜度:O(N+C),其中,C=N*(logN-lgM),約等於NlgN,N是元素數量,M是桶的個數。
基數排序:
kN級別(k是最大數的位數),是整數數值型排序裡面又快又穩的,無論元素分佈如何。
只開闢固定的空間(10個桶)。
對比桶排序,基數排序每次需要的桶數量並不多,而且基數排序幾乎不需要任何“比較”操作,而桶排序在桶數量相對較少時,資料難免集中到一個桶。桶內多個資料必須基於比較操作的排序。
因此,在實際應用中,對十進位制整數來說,基數排序的更好用。
比較:
要求:
1、準確描述演算法過程;
2、寫出虛擬碼;
3、能分析時間複雜度;
4、能靈活應用。
相關文章
- 第三章:查詢與排序(下)----------- 3.20桶排序排序
- 第二章 :查詢與排序-------2.15 分析10種排序演算法的穩定性排序演算法
- 第三章:查詢與排序(下)----------- 3.19 計數排序排序
- 第三章:查詢與排序(下)----------- 3.21基數排序排序
- 第三章:查詢與排序(下)----------- 3.14 逆序對個數排序
- 第三章 :查詢與排序-------3.2你需要掌握的快速排序演算法排序演算法
- 第三章:查詢與排序(下)----------- 3.16堆的概念及堆排序思路排序
- 第三章:查詢與排序(下)----------- 3.28 特殊排序(利用sort函式)排序函式
- 常用的比較排序演算法總結排序演算法
- 第三章:查詢與排序(下)----------- 3.23 相關題解:排序陣列中找和的因子排序陣列
- ORDER對查詢結果進行排序排序
- 結構與演算法(04):排序規則與查詢演算法演算法排序
- 第三章:查詢與排序(下)----------- 3.15基礎學習_樹、二叉樹、堆排序排序二叉樹
- 排序演算法對比排序演算法
- 第三章:查詢與排序(下)----------- 3.27 用計數排序解決員工年齡問題排序
- 幾種常見的排序演算法總結排序演算法
- 第三章 :查詢與排序-------3.7分治模式的完美詮釋_歸併排序排序模式
- 幾種常見排序演算法總結排序演算法
- 第二章 :查詢與排序---------遞迴、查詢與排序補充排序遞迴
- 第三章:查詢與排序(下)----------- 3.12 實踐_最小可用id是多少排序
- 第二章 :查詢與排序-------希爾排序排序
- 第三章:查詢與排序(下)----------- 3.29 題解:判斷陣列的包含問題排序陣列
- 六種排序演算法的JavaScript實現以及總結排序演算法JavaScript
- 排序演算法分析總結(附js實現)排序演算法JS
- 第三章:查詢與排序(下)----------- 3.11 趣味擴充_尋找發帖水王排序
- 第二章 :查詢與排序-------2.13_三種典型遞迴形式演算法的效能分析排序遞迴演算法
- 排序演算法全總結排序演算法
- 排序和查詢排序
- 第三章 :查詢與排序-------3.6快排在工程實踐中的優化排序優化
- 資料結構與演算法整理總結---排序 2資料結構演算法排序
- 總結下js排序演算法和亂序演算法JS排序演算法
- 幾種排序的比較排序
- 常用排序演算法總結(1)排序演算法
- 常用排序演算法總結(2)排序演算法
- 常見排序演算法總結排序演算法
- iOS 演算法之排序、查詢、遞迴iOS演算法排序遞迴
- 第三章 :查詢與排序(下)-------3.1分治法介紹及關鍵點解析排序
- 三種高階比較排序演算法排序演算法