比較類排序:
類型 | 時間復雜度 | 空間復雜度 |
冒泡 | O(n^2) | O(1) |
選擇 | O(n^2) | O(1) |
插入 | O(n^2) | O(1) |
歸並 | O(n*logn) | O(N) |
快速 | O(n*logn) | O(logN)~O(N) |
堆 | O(n*logn) | O(1) |
希爾 | O(n*logn) | O(1) |
非比較類排序:
類型 | 時間復雜度 | 空間復雜度 |
計數排序 | O(N) | O(N) |
基數排序 | O(N) | O(N) |
桶排序 | O(N) | O(N) |
穩定性的概念:
假定待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保存不變,稱這種排序算法是穩定的,否則稱為不穩定的。
穩定的排序算法:
冒泡 插入 歸並 計數 基數 桶
不穩定的排序算法:
選擇 快速 希爾 堆
冒泡排序
選擇排序
插入排序
歸並排序
快速排序
- 默認選擇第一個數為基數
- 實現比基數小的數放在基數左邊,比基數大的數放在基數右邊
- 設置左右兩個指標,不斷向中間靠,左邊尋找比基數大的數,標記,右邊尋找比基數小的數,標記,交換兩個標記位置的數
- 直到兩個指標相遇,停止移動指標,交換基數位和左指標位置的數
- 繼續重復以上步驟,對兩個區別的數進行同等操作
希爾排序
堆排序:
- 建成大根堆
- 堆頂元素和最后一個元素交換
- 剔除最后一個元素
- 變成大根堆,重復2,3步驟
計數排序
桶排序(計數排序升級版)
- 設置一個定量的數組當作空桶;
- 遍歷輸入數據,並且把數據一個一個放到對應的桶里去;
- 對每個不是空的桶進行排序;
- 從不是空的桶里把排好序的數據拼接起來。
基數排序