[演算法] 排序演算法(Sort Algorithm)
YehYeh\'s Notepad yehyeh@gmail.com 

[演算法(Algorithm)] 排序演算法(Sort Algorithm)

  • 內部 & 外部排序
    • 內部排序(Internal Sort)
      • 資料筆數少,可以全部放到記憶體中排序
      • 一般的演算法皆為內部排序
    • 外部排序(External Sort)
      • 資料量大,無法放到記憶體中排序,需透過其它儲存裝置輔助
      • 外部排序通常會分次載入部份的資料到記憶體,用內部排序演算法排序後再回存或合併結果
  • 穩定與不穩定
    • 穩定(Stable)
      • 相同鍵值的資料,排序後順序和排序前一樣
        • 排序前: 2, 7, 9, 3, 7 藍7在粉紅7前面
        • 排序後: 2, 3, 7, 7, 9 藍7保持在粉紅7前面
    • 不穩定(Unstable)
      • 相同鍵值的資料,排序後順序不一定和排序前一樣
        • 排序前: 2, 7, 9, 3, 7 藍7在粉紅7前面
        • 排序後: 2, 3, 7, 7, 9 藍7在粉紅7後面
  • 原地置換(In-Place)
    • 使用資料原來的資料結構(陣列)進行排序,不需使用暫存的輔助資料結構
  • 常用排序演算法整理
    演算法 時間複雜度 空間複雜度 穩定性 類型
    Best Worst Avg
    選擇排序法(Selection Sort) Ο(n2) Ο(n2) Ο(n2) Ο(1) 不穩定 選擇
    插入排序法(Insertion Sort) Ο(n) Ο(n2) Ο(n2) Ο(1) 穩定 插入
    氣泡排序法(Bubble Sort) Ο(n) Ο(n2) Ο(n2) Ο(1) 穩定 交換
    謝爾排序法(Shell Sort) Ο(n) Ο(n2)~ Ο(n1.5) Ο(n5/4) Ο(n) + Ο(1) 不穩定 插入
    搖晃排序法(Shaker Sort) Ο(n) Ο(n2) Ο(n2) Ο(1) 穩定 交換
    快速排序法(Quick Sort) Ο(n log n) Ο(n2) Ο(n log n) Ο(log n)~Ο(n) 不穩定 交換
    合併排序法(Merge Sort) Ο(n log n) Ο(n log n) Ο(n log n) Ο(n) 穩定 合併
    堆積排序法(Heap Sort) Ο(n log n) Ο(n log n) Ο(n log n) Ο(n) + Ο(1) 不穩定 選擇
    基數排序(Radix Sort) Ο(d×(n+r)) Ο(d×(n+r)) Ο(d×(n+r)) Ο(n×r) 穩定 分配
  • 常用排序演算法概念
    • 選擇排序法(Selection Sort)
    • 插入排序法(Insertion Sort)
      • 依序由未排序的資料中選一筆資料
      • 一一掃瞄已排序資料,將選取的資料插入正確位置
      • 插入排序法詳細介紹
    • 氣泡排序法(Bubble Sort)
      • 對未排序資料兩兩比對掃瞄
      • 兩兩比對時會將未排序的最大值,介由Swap移到未排序資料中的最右邊
      • 氣泡排序法詳細介紹
    • 謝爾排序法(Shell Sort)
    • 搖晃排序法(Shaker Sort)
      • 雙向的氣泡排序法
      • 每回合都會將未排序資料中的最大值移到最右邊,最小值移到最左邊
      • 搖晃排序法詳細介紹
    • 快速排序法(Quick Sort)
      • 將比基準值(Pivot)小的數值移到左邊,比基準值大的數值移到右邊
      • 對基準值的左、右子數列遞迴作相同動作
      • 快速排序法詳細介紹
    • 合併排序(Merge Sort)
      • 將數列對分成兩個子數列,並遞回對分
      • 對分至只有一個元素時,將元素回傳合併
      • 合併排序法詳細介紹
    • 堆積排序(Heap Sort)
      • 利用堆積樹(Heap Tree)的性質來排序
      • 最大堆積樹(Max Heap Tree)的根節點一定是最大值,一一與最後一個樹葉節點交換後,取出加入已排序數列
      • 將原來的樹重新調整為最大堆積樹
      • 堆積排序法詳細介紹
    • 基數排序(Radix Sort)