1. 程式人生 > >冒泡、快排、歸併、堆排序

冒泡、快排、歸併、堆排序

排序方式 時間複雜度 空間複雜度 穩定性
平均 最壞 最好
氣泡排序 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.堆排序:將根節點與最後一個葉子節點交換,對根節點進行調整,調整後對被交換的子節點進行調整,重複操作直至調整完畢。將最後一個葉子節點排除在外(即,將堆的大小減一後),重複上述操作。