1. 程式人生 > >排序演算法 (一)——基礎

排序演算法 (一)——基礎

1.定義:

排序(sort)是將一組資料按照一定的規則來進行排列,一般按照遞增或遞減的順序來進行排列,排序演算法是一種基本的演算法。

2.排序演算法的分類

3.排序演算法的優劣

如何判斷排序演算法的優劣:

  • 計算的複雜度:為了全面考慮,往往從最差、平均和最好三種情況進行評價。
  • 系統資源的佔用:主要包括記憶體及其他資源的佔用。一個好的排序應該佔用少的記憶體資源。

4.排序演算法的複雜度

排序方式 時間複雜度 空間複雜度
空間
穩定性
平均時間 最好時間 最壞時間
氣泡排序演算法 O(n^2) O(n) O(n^2) O(1) 穩定排序
快速排序演算法 O(nlogn) O(nlogn) O(n^2) O(logn) 非穩定排序
選擇排序演算法 O(n^2) O(n^2) O(n^2) O(1) 非穩定排序
堆排序演算法 O(nlogn) O(nlogn) O(nlogn) O(1) 非穩定排序
插入排序演算法 O(n^2) O(n) O(n^2) O(1) 穩定排序
希爾排序演算法 O(n^3/2)   O(n^2) O(1) 非穩定排序
合併排序演算法 O(nlogn) O(nlogn) O(nlogn) O(n) 穩定排序

各種漸近時間複雜度由小到大的順序如下:

常數階O(1) < 對數階O(logn) < 線性階O(n) < 線性對數階O(nlogn) < 平方階O(n^2) < 立方階O(n^3) <K次方階O(n^k)< 指數階O(2^n) 

5.穩定排序演算法

穩定排序演算法主要依照相等的關鍵字維持記錄的相對次序來進行排序

如,對於有兩個相等關鍵字的資料D1和D2,在待排序的資料中D1出現在D之前,在排序過後的資料中D1也在D2之前,那麼這就是一個穩定排序演算法。

氣泡排序、插入排序和合並排序演算法都是穩定排序。

而選擇排序、希爾排序、快速排序和堆排序都不是穩定排序演算法。