前面幾篇部落格分別羅列和總結了近期學習的幾種排序演算法,今天總結一下。
排序演算法有很多,在實際使用的時候需要根據情況選擇合適的相應演算法。每種演算法都有其優缺點,判斷一個演算法的優劣,可以參考的標準:
- 計算的複雜度:依據排序資料量的大小(n),好的表現是O(nlogn),最差表現為O(n2)
- 系統資源的使用:包括計算機記憶體以及其他資源的使用,主要考慮計算機輔助記憶體的多少
- 穩定度
幾種演算法的複雜度:
- 氣泡排序法:平均速度和最壞情況下的速度都為O(n2)
- 快速排序法:平均速度為O(nlogn),比氣泡排序法快,單在最壞的情況下與氣泡排序法相同,為O(n2)
- 簡單選擇排序法,平均速度和最壞情況下的速度都為O(n2)
- 堆排序法:平均速度和最壞情況下的速度都為O(nlogn)
- 希爾排序法:平均速度為O(n3/2),最壞情況下速度為O(n2)
- 合併排序法:平均速度和最壞情況下的速度都為O(nlogn)
幾種演算法的穩定度:
- 穩定的演算法:
- 氣泡排序法
- 插入排序法
- 合併排序法
- 不穩定的演算法:.
- 選擇排序法
- 希爾排序法
- 堆排序法
- 快速排序法
選擇排序演算法的幾個參考:
- 當資料為正序時,使用直接插入排序法、氣泡排序法和快速排序法
- 當n值比較小(如n<=50),可採用直接插入排序法或選擇排序法。當記錄規模比較小時直接插入排序較好;否則因為直接選擇移動的記錄數多於直接插入,應選擇直接選擇排序
- 當n值比較大時,則應採用時間複雜度為O(nlogn)的排序演算法,如快速排序、堆排序或合併排序
- 當待排序的關鍵字是隨機分佈時,快速排序的平均時間最短
- 若要求排序穩定,則可選擇合併排序