排序演算法#

排序是演算法學習的基石,幾乎所有程式語言都內建排序函式。掌握排序演算法不僅能應對面試,更能理解演算法設計的核心思想。

章節概覽#

分類演算法時間複雜度空間複雜度穩定性
基礎排序冒泡、插入、選擇O(n²)O(1)冒泡/插入穩定
進階排序歸併、快速O(n log n)O(n) / O(log n)歸併穩定
線性排序桶、計數、基數O(n)O(n)視實作而定

如何分析排序演算法#

分析排序演算法需要從三個維度考量:

  1. 執行效率

    • 最好、最壞、平均時間複雜度
    • 係數、常數、低階項(小規模資料時很重要)
    • 比較次數與交換/移動次數
  2. 記憶體消耗

    • 空間複雜度 O(1) 稱為「原地排序」(In-place)
  3. 穩定性

    • 相等元素排序後是否保持原有順序
    • 多欄位排序時,穩定性至關重要

工業級排序函式(如 C 的 qsort、Java 的 Arrays.sort)通常混合使用多種演算法,根據資料規模動態選擇最優策略。