目錄:
- 穩定性
- 復雜度
穩定性與復雜度
穩定性:指排序后,相同元素保持出現的先后順序。
時間復雜度是O(N2),額外空間負責度O(1):
- l 冒泡排序:當遇到相同數時,該數不交換,將后面的數往下沉。可以穩定;
- l 插入排序:當遇到相同數時,該數不交換;可以穩定;
- l 選擇排序:做不到穩定性。因為你要從后面的所有數中找到最小的,然后將前面的某一個a與該最值交換,如果有多個a存在,那么,a的先后順序將無法保證。故做不到。
復雜度是O(N*logN):
- l 歸並排序:merge時,當相同時先拷貝左邊(小區域)的數;可以穩定; 額外空間復雜度為O(N);
- l 快排:做不到穩定性; 額外空間復雜度為O(logN);
- l 堆排:做不到穩定性。在建大根堆的時候,就都已經不能保證穩定性了。 額外空間復雜度為O(1);
排序 | 穩定性 | 時間復雜度 | 額外空間復雜度 |
冒泡排序 | 穩定 | O(N2) | O(1) |
插入排序 | 穩定 | O(N2) | O(1) |
選擇排序 | 不 | O(N2) | O(1) |
歸並排序 | 穩定 | O(N*logN) | O(N) |
快排 | 不 | O(N*logN) | O(logN) |
堆排 | 不 | O(N*logN) | O(1) |
在補一補哈:
排序分類大概有這些,上面的知識列出了比較常見的:
再補一個全的:
發現這一個更全:
注:
1 歸並排序可以通過手搖算法將空間復雜度降到O(1),但是時間復雜度會提高。
2 基數排序時間復雜度為O(N*M),其中N為數據個數,M為數據位數
輔助記憶
- 時間復雜度記憶
1. 冒泡、選擇、直接 排序需要兩個for循環,每次只關注一個元素,平均時間復雜度為O(n2)O(n2)(一遍找元素O(n)O(n),一遍找位置O(n)O(n))
2. 快速、歸並、希爾、堆基於二分思想,log以2為底,平均時間復雜度為O(nlogn)O(nlogn)(一遍找元素O(n)O(n),一遍找位置O(logn)O(logn))
- 穩定性記憶---“快希選堆”(快犧牲穩定性)
1. 排序算法的穩定性:排序前后相同元素的相對位置不變,則稱排序算法是穩定的;否則排序算法是不穩定的。
Over。。。
參考:
1. 排序算法時間復雜度、空間復雜度、穩定性比較(里面有動圖,很好理解)