軟體工程師職涯升級計畫啟動!立即預約職涯諮詢、履歷健檢或模擬面試👈,為您的加薪做好準備!
🤔 為什麼要懂 Big O?
在技術面試中,寫出能跑的程式只是基本,真正的關鍵是:
- 你的程式現在的 時間複雜度 (Time Complexity) 是多少?
- 當資料變大時,效能會怎麼變?
- 你能不能再優化?
懂 Big O,就像懂「演算法的語言」。沒有這個基礎,談優化就像盲劍客亂揮劍。
Big O 是什麼?
Big O Notation:描述一個演算法在「最壞狀況」下,執行時間隨輸入資料量成長的速度。常見的三種情境:
- 🟢 Best Case(最佳狀況)
- 🔴 Worst Case(最壞狀況 → Big O 主要關注)
- 🟡 Average Case(平均狀況,較接近真實情境)
🔑 常見時間複雜度
O(1) — Constant Time
無論輸入多大,執行時間都一樣。
function getFirst(arr) {
return arr[0]
}
console.log(getFirst([10, 20, 30])) // 10
console.log(getFirst([99, 88, 77, 66, 55])) // 99
O(n) — Linear Time
輸入增加,執行時間也等比例增加。
function printAll(arr) {
for (let item of arr) {
console.log(item)
}
}
printAll([1, 2, 3])
// 輸出: 1, 2, 3
printAll([1, 2, 3, 4, 5, 6])
// 輸出: 1, 2, 3, 4, 5, 6
O(n²) — Quadratic Time
巢狀迴圈最常見,輸入越大,效能急速下降。
function printPairs(arr) {
for (let i of arr) {
for (let j of arr) {
console.log(`(${i}, ${j})`)
}
}
}
printPairs([1, 2, 3])
// 共 9 組組合
O(log n) — Logarithmic Time
常見於「二分法」演算法,例如 Binary Search。
function binarySearch(arr, key) {
let low = 0, high = arr.length - 1
while (low <= high) {
let mid = Math.floor((low + high) / 2)
if (arr[mid] === key) return mid
arr[mid] < key ? low = mid + 1 : high = mid - 1
}
return -1
}
console.log(binarySearch([1,2,3,4,5], 3)) // index 2
每次對半切,資料越大,效率優勢越明顯。
O(n log n) — Divide & Conquer
常見於排序演算法:Merge Sort、Quick Sort。
- 拆分:O(log n)
- 合併:O(n)
- 總和:O(n log n)
// 簡化版 Merge Sort
function mergeSort(arr) {
if (arr.length <= 1) return arr
let mid = Math.floor(arr.length / 2)
let left = mergeSort(arr.slice(0, mid))
let right = mergeSort(arr.slice(mid))
return merge(left, right)
}
function merge(left, right) {
let result = []
while (left.length && right.length) {
result.push(left[0] < right[0] ? left.shift() : right.shift())
}
return [...result, ...left, ...right]
}
console.log(mergeSort([5, 3, 8, 2, 1, 4]))
// [1, 2, 3, 4, 5, 8]
圖像化理解
- O(1):🚗 平直的高速公路
- O(log n):📉 趨緩的上升曲線
- O(n):📈 線性成長
- O(n log n):⚖️ 稍微加速的線性
- O(n²) 以上:💣 資料大就炸掉
👉 Big O 只看「最大影響因子」:
3n + 100
→ O(n)n² + n
→ O(n²)

學習小技巧
- 白板練習:寫之前先講出複雜度。
- 持續優化:嘗試把 O(n²) 變成 O(n log n) 或 O(n)。
- 養成習慣:每次寫 function,問自己「這是什麼 Big O?」。
Big O 不是數學課題,而是 理解程式效能的語言。
當你能流利說出「這段程式是 O(n log n)」,不只面試更有自信,日常開發也會更有結構感。
💡 記住:
- O(1) 與 O(log n) = 🚀 飛快
- O(n) = ✅ 可接受
- O(n²) 以上 = ⚠️ 大型資料就危險
掌握 Big O,你就掌握了寫出高效程式的關鍵! 🚀