【路飛學城Day170】演算法小結
阿新 • • 發佈:2018-12-09
Evernote Export
演算法的思想是能省則省,記憶體能少則少,時間執行能少儘量少 堆排序的時間複雜度O(nlogn) 堆排序的內建模組heapq 常用函式 heapify(x) heappush(heap, item) heappop(heap) topkey問題 現在有n個數,設計演算法得到前k大的數(k>n)排序lowB三人組 O(kn)
堆排序 O(nlogk)
堆排序解決思路 取列表前k個元素建立一個小根堆,堆頂就是目前第k大的數
一次向後遍歷原列表,對於列表中的元素,如果小於堆頂,則忽略該元素,如果大於堆頂,則將堆頂更換為該元素,並且對堆進行一次調整
歸併排序 假設現在的列表分兩段有序,如何將其合成為一個有序列表 歸併排序 分解:將列表越分越小,直至分成一個元素 終止條件:一個元素是有序的 合併:將兩個有序列表歸併,列表越來越大
三種排序演算法小結 時間複雜度都是O(logn) 一般情況下,就執行時間而言:快速排序<歸併排序<堆排序 三種排序演算法的缺點: 快速排序:極端情況下排序效率低 歸併排序:需要額外的記憶體開銷
排序方法 | 時間複雜度 | 空間複雜度 | 穩定性 | 程式碼複雜度 | ||
最壞情況 | 平均情況 | 最好情況 | ||||
氣泡排序 | O(n^2) |
O(n^2)
|
O(n) | O(1) | 穩定 | 簡單 |
直接選擇排序 |
O(n^2)
|
O(n^2)
|
O(n^2)
|
O(1)
|
不穩定 | 簡單 |
直接插入排序 |
O(n^2)
|
O(n^2)
|
O(nlogn)
|
O(1)
|
穩定
|
簡單 |
快速排序 |
O(n^2)
|
O(nlogn)
|
O(nlogn)
|
平均情況O(logn); 最壞情況O(n) |
不穩定
|
較複雜 |
堆排序 | O(nlogn) |
O(nlogn)
|
O(nlogn)
|
O(1) |
不穩定
|
複雜 |
歸併排序 |
O(nlogn)
|
O(nlogn)
|
O(nlogn)
|
O(n) |
穩定
|
較複雜 |