Chapter 13 排序法 - Ian-Liu-1990/Data-Structure GitHub Wiki
I. 按資料量與記憶體分類
-
內部排序 : 將資料(量不大)全部載入主記憶體,全部在記憶體中進行排序
-
外部排序 : 資料量太大,無法全部載入主記憶體,將資料存於輔助記憶體空間內,在分段載入主記憶體以進行排序
-
穩定 : 排序完後,相同值仍維持原來先後次序
-
不穩定 : 反之,排序完後,相同值仍維持原來先後次序
-
比較排序 : 依照大小值進行比較做排序
-
分佈式排序 : 依照數值統計與分佈範圍進行排序
排序 - 快 速 複 習
II.名 稱 | 穩 定 | 最 佳 | 最 差 | 平 均 | 適 性 | 額 外 空 間 |
---|---|---|---|---|---|---|
插入 | Stable | O(N) | O(N^2) | O(N^2) | 幾乎已排好 | 無 |
氣泡 | Stable | O(N) | O(N^2) | O(N^2) | 幾乎已排好 | 無 |
選擇 | 沒有額外空間則Unstable | O(N^2) | O(N^2) | O(N^2) | 記錄較長,關鍵值較短,需搬動次數少 | 無 |
Shell | UnStable | O(Nlog*log) | O | O | 記錄較長,關鍵值較短,需搬動次數少 | 無 |
快速 | Unstable | O(NlogN) | O(N^2) | O(NlogN) | 不適合有大量已排序 | O(logN)~O(N) |
快速延伸 - 尋找第K小或中位數 | O(N) | O(N^2) | O(N) | - | - | - |
合併 | Stable | O(NlogN) | - | - | 允許有額外空間 | O(N) |
堆積 | Unstable | O(NlogN) | - | - | 無 |
名 稱 | 穩 定 | 最 佳 | 最 差 | 平 均 | 適 性 | 額 外 空 間 |
---|---|---|---|---|---|---|
MSD - 桶子排序 | Stable | O(NlogN)平均分佈資料 | O(nk)資料分佈不均 | O(nk) | 允許有額外空間 | O(n) |
LSD - 桶子排序 | Stable | O(k(n+b)) | O(k(n+b)) | O(k(n+b)) | 允許有額外空間 | O(n+b) |
計數排序 | Stable | O(m+n) | O(m+n) | O(m+n) | 允許有額外空間,關鍵值範圍小,鍵值重複性高 | O(m+n) |
程式排序說明
III.1. 插入
- 避免產生Worst Case
- Randomly Choosing : 降低發生機率,但無法完全避免
- Median-of-Three : 取第1,第n,和第中間項,三者取中位數,降低發生機率,但無法完全避免
- Median-of-Median : N筆資料分成每群r個,對群排序選出各群的中位數,中位數在找中位數當作Pivot