冒泡、快排、歸併、堆排序
阿新 • • 發佈:2019-01-23
排序方式 | 時間複雜度 | 空間複雜度 | 穩定性 | ||
平均 | 最壞 | 最好 | |||
氣泡排序 | O(n^2) | O(n^2) | O(n) | O(1) | 穩定 |
快速排序 | O(nlogn) | O(n^2) | O(nlogn) | O(logn) | 不穩定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不穩定 |
歸併排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 穩定 |
排序方式穩定性:若存在相同的值,使用某種方式排序後,這些相同的值的相對位置不變,則稱該方式是穩定的,反之則是不穩定的。
快速排序原理:選定一個值為基準值(可在這組資料中隨機選取),一個指標從右至左掃描,指向資料比基準值小時停止,另一個指標從左至右掃描,指向資料比基準值大時停止,交換倆資料後繼續掃描,當兩個指標指向相同位置時,調整基準值位置。基準值左右兩個陣列按相同方式再排序。
歸併排序原理:遞迴分治,當規模減小到每個陣列只有一個值之後開始合併,兩個陣列從左至右掃描,按從小到大的順序新增到一個新的陣列中。
堆排序(以大根堆為例):
1.調整:比較根節點及其兩個子節點大小,將最大值放到根節點
2.建立大根堆:對每一個非葉子節點進行一次調整
3.堆排序:將根節點與最後一個葉子節點交換,對根節點進行調整,調整後對被交換的子節點進行調整,重複操作直至調整完畢。將最後一個葉子節點排除在外(即,將堆的大小減一後),重複上述操作。