📘 概念導讀

Sort & Search

二分搜尋的前提是「資料已排序」,所以排序與搜尋是一體兩面。這頁整理常見排序演算法的複雜度與特性,幫你在面試被問「你用的 sort 底層是什麼」「能不能比 O(n log n) 更快」時答得上來,也幫你判斷一題該不該先花 O(n log n) 排序。

排序演算法複雜度

演算法平均最壞空間穩定比較式
插入排序O(n^2)O(n^2)O(1)
選擇排序O(n^2)O(n^2)O(1)
氣泡排序O(n^2)O(n^2)O(1)
合併排序O(n log n)O(n log n)O(n)
快速排序O(n log n)O(n^2)O(log n)
堆排序O(n log n)O(n log n)O(1)
計數排序O(n + k)O(n + k)O(k)
桶排序O(n + k)O(n^2)O(n + k)
基數排序O(d(n + k))O(d(n + k))O(n + k)

k 為值域大小,d 為位數。)

三個關鍵屬性

為什麼線性排序能突破下界

任何比較式排序最壞都不可能快於 O(n log n)(見 Problem Solving → 比較排序的下界)。計數/桶/基數排序之所以能做到 O(n),是因為它們不靠比較,而是利用「值域有限」這個額外條件,用值本身當索引直接定位。代價是:值域 k 一旦遠大於 n,空間與時間就划不來。

TIP

面試實戰判斷:

  • 值是小範圍整數(如分數 0–100、字母)→ 考慮計數排序。
  • 只需要「部分有序」(第 k 大、前 k 個)→ 用堆或 Quickselect,不必整個排序。
  • 一般情況 → 直接用語言內建排序(多為合併排序或 introsort 的混合),別重造輪子。

排序後能做什麼

排序常常不是答案,而是讓後續步驟變簡單的前處理:

跨倉庫導讀