Sorting Algorithm

  在計算機科學與數學中,一個排序演算法(Sorting algorithm)是一種能將一串資料依照特定排序方式的一種演算法。
  最常用到的排序方式是數值順序以及字典順序。有效的排序演算法在一些演算法(例如搜尋演算法與合併演算法)中是重要的 ,如此這些演算法才能得到正確解答。排序演算法也用在處理文字資料以及產生人類可讀的輸出結果。
  在此將介紹幾種常見、常用的排序演算法以供參考。

Principle

  • 輸出結果為遞增序列(遞增是針對所需的排序順序而言)。
  •  
  • 輸出結果是原輸入的一種排列、或是重組。
  • Complexity

    主要討論時間及空間的複雜度:
      依據串列(list)的大小(n),一般而言,好的表現是O(n log n), 且壞的表現是O(n2)。對於一個排序理想的表現是O(n)。僅使用一個抽象關鍵比較運算的排序演算法總平均上總是至少需要O(n log n)。
      高等與低等排序也是依其Average Case下的時間複雜度而定義。

    Internal vs. External sort

    由資料量的多寡是否可一次全部載入記憶體來決定:

  • Internal :資料量少得足以整個搬到記憶體中進行排序。
  • External :資料量多得無法以全部置於記憶體中進行排序,須藉助輔助記憶體的方法。
  • Stable vs. Unstable sort

    通常input data中常有多個相同鍵值存在。   ex:...,k,...,k*,...。
    在經過sort之後,視其output結果,相同鍵值的值是否保持相同順序:

  • If ...,k,k*,... : Stable
  • If ...,k*,k,... : Unstable