名稱 | 數據對象 | 穩定性 | 時間複雜度 | 額外空間複雜度 | 描述 | |
---|---|---|---|---|---|---|
平均 | 最壞 | |||||
冒泡排序 | 數組 | ![]() |
{\displaystyle O(n^{2})}![]() |
{\displaystyle O(1)}![]() |
(無序區,有序區)。 從無序區透過交換找出最大元素放到有序區前端。 |
|
選擇排序 | 數組 | ![]() |
{\displaystyle O(n^{2})}![]() |
{\displaystyle O(1)}![]() |
(有序區,無序區)。 在無序區裏找一個最小的元素跟在有序區的後面。對數組:比較得多,換得少。 |
|
鏈表 | ![]() |
|||||
插入排序 | 數組、鏈表 | ![]() |
{\displaystyle O(n^{2})}![]() |
{\displaystyle O(1)}![]() |
(有序區,無序區)。 把無序區的第一個元素插入到有序區的合適的位置。對數組:比較得少,換得多。 |
|
堆排序 | 數組 | ![]() |
{\displaystyle O(n\log n)}![]() |
{\displaystyle O(1)}![]() |
(最大堆,有序區)。 從堆頂把根卸出來放在有序區以前,再恢復堆。 |
|
歸併排序 | 數組 | ![]() |
{\displaystyle O(n\log ^{2}n)}![]() |
{\displaystyle O(1)}![]() |
把數據分爲兩段,從兩段中逐個選最小的元素移入新數據段的末尾。 可從上到下或從下到上進行。 |
|
{\displaystyle O(n\log n)}![]() |
{\displaystyle O(n)+O(\log n)}![]() 若是不是從下到上 |
|||||
鏈表 | {\displaystyle O(1)}![]() |
|||||
快速排序 | 數組 | ![]() |
{\displaystyle O(n\log n)}![]() |
{\displaystyle O(n^{2})}![]() |
{\displaystyle O(\log n)}![]() |
(小數,基準元素,大數)。 在區間中隨機挑選一個元素做基準,將小於基準的元素放在基準以前,大於基準的元素放在基準以後,再分別對小數區與大數區進行排序。 |
希爾排序 | 數組 | ![]() |
{\displaystyle O(n\log ^{2}n)}![]() |
{\displaystyle O(n^{2})}![]() |
{\displaystyle O(1)}![]() |
每一輪按照事先決定的間隔進行插入排序,間隔會依次縮小,最後一次必定要是1。 |
計數排序 | 數組、鏈表 | ![]() |
{\displaystyle O(n+m)}![]() |
{\displaystyle O(n+m)}![]() |
統計小於等於該元素值的元素的個數i,因而該元素就放在目標數組的索引i位(i≥0)。 | |
桶排序 | 數組、鏈表 | ![]() |
{\displaystyle O(n)}![]() |
{\displaystyle O(m)}![]() |
將值爲i的元素放入i號桶,最後依次把桶裏的元素倒出來。 | |
基數排序 | 數組、鏈表 | ![]() |
{\displaystyle O(k\times n)}![]() |
{\displaystyle O(n^{2})}![]() |
一種多關鍵字的排序算法,可用桶排序實現。 |