歡迎來到排序演算法
先完成 3 個小任務,建立基礎感覺!
進度
🤔 開始之前,說說你的直覺
電腦要把 100 個雜亂的數字排好,你覺得它是怎麼做到的?

💡 先記住你的直覺——等等看 Bubble Sort 你會大吃一驚!

人類直覺
一眼看完
電腦實際
100 個數字最壞要比 4,950 次!

氣泡排序的規則:相鄰兩個比大小,大的往右走,每一輪結束最大的會「冒泡」到最右邊。
[5, 2, 4, 1, 3] 排成 [1, 2, 3, 4, 5] 總共要交換幾次?
(猜完按下方「Bubble Sort 開始」驗證)

🎯 我猜 次交換

想像每個數字像氣泡:大的氣泡比較重,慢慢沉到最右邊。每一輪只能把目前最大的推到右側。

範例 →
動畫速度 中速
比較次數
0
交換次數
0
輪次
0
比較中 交換中 已排好
← 選範例,按「Bubble Sort 開始」看氣泡冒上來!

像在抽屜裡找最小的襪子:每一輪掃過整段、記住最小的位置,最後再交換一次。比較很多次,但交換很少。

範例 →
動畫速度 中速
比較次數
0
交換次數
0
輪次
0
目前最小 比較中 交換中 已排好
← 選範例,按「Selection Sort 開始」看每輪挑最小的!

🫧 Bubble — 相鄰交換

看「相鄰兩個」誰大誰小,誰大就往後推一格。
每一輪可能會交換很多次,但每次只動一格。

🎯 Selection — 找最小再交換

每一輪先「看完整段」找出最小的,最後才一次交換
比較次數一樣多,但交換次數少很多。

💻 給想看程式碼的同學 PYTHON
Python · Bubble Sort
def bubble_sort(arr):
    n = len(arr)
    for i in range(n - 1):
        for j in range(n - 1 - i):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr
Python · Selection Sort
def selection_sort(arr):
    n = len(arr)
    for i in range(n - 1):
        min_idx = i
        for j in range(i + 1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr
最壞時間複雜度 O(n²) 兩種都要兩層迴圈 — n 越大越慢
空間複雜度 O(1) 原地排序,不需要額外陣列
Bubble — 最佳情況 O(n) 已排好時,加一個 swapped 旗標可提早結束
🧠 進階挑戰

Bubble Sort 和 Selection Sort 都是 O(n²),那為什麼在很多情況下大家寧願選 Bubble?想兩個原因。

💡 點我看提示
① Bubble 在「幾乎排好」時可以提早結束(最佳 O(n))。
② Bubble 是穩定排序(相同值不會交換順序),Selection 不是。
🪞想一想(不限對錯)P2
兩種排序你都看過了,「氣泡」和「選擇」這兩個名字,哪一個更能描述演算法的動作?為什麼?
參考想法
兩個名字都很傳神!「氣泡」描繪了大數字「沉到右邊、小數字浮上左邊」的視覺;「選擇」則強調「從一堆候選人裡挑出最小的」這個決策動作。沒有絕對的對錯——你的觀察才是最重要的學習!
我對這個概念的掌握度:

Bubble 和 Selection 都是 O(n²)——意思是「資料量乘以 10,時間大約乘以 100」。
看看下面三組數字的差距,你會發現為什麼「演算法效率」這麼重要!

n = 10
45
10 個數字最壞要比 45 次
(瞬間完成)
n = 100
4,950
100 個要比 4,950 次
(還是很快)
n = 1,000
499,500
1,000 個要比 約 50 萬次
(開始有感覺)
OBSERVATION 資料 ×10 → 時間 ×100。
所以 100 萬筆資料用 Bubble Sort 要「5,000 億次比較」——這就是為什麼後面要學 Merge Sort 和 Quick Sort(O(n log n))。

兩個都是 O(n²),但實務上有微妙差異:

場景 Bubble Sort Selection Sort
最壞比較次數 n(n-1)/2 n(n-1)/2
最壞交換次數 n(n-1)/2 n-1(少很多!)
已排好時的速度 O(n)(加旗標可提早結束) O(n²)(不管怎樣都全掃)
穩定排序? ✅ 是 ❌ 否
什麼是穩定排序?
當有兩個值一樣(例如兩個 5),排序後它們的相對順序不會亂掉,就叫穩定。實務上如果你先依「分數排」再依「姓名排」,穩定性就重要。
🪞想一想P2
如果你有 1 億筆資料要排序,用 O(n²) 大概要 10,000,000,000,000,000 次運算。你覺得這在實務上代表什麼?
參考想法
這就是「演算法複雜度」會決定程式生死的關鍵!同樣是排序,O(n²) 在 1 億筆資料可能跑好幾年;但 O(n log n) 的 Merge/Quick Sort 大約幾秒就完成。這也是為什麼 Google、Netflix 這些公司會請數學家——好的演算法比加 100 倍硬體還有用。
我對這個概念的掌握度:

我們每天都在不知不覺中做排序——只是沒意識到自己用了哪種策略。

📚

整理書架

找書架上最矮的那本,放到最左邊;再找剩下最矮的,放第二個...

≈ Selection Sort
🃏

整理撲克牌

抽到新牌時,從手上的牌一張張往左比,找到位置塞進去。

≈ Insertion Sort
🍱

排便當隊

前後兩個同學比身高,誰高就和前面交換——這就是氣泡排序!

≈ Bubble Sort
🎵

Spotify 推薦

根據你的喜好分數,把歌曲從高到低排——播放清單背後就是排序演算法。

≈ 通常 O(n log n)
🛒

蝦皮價格排序

「價格低到高」這個按鈕——一秒幫你比較幾千件商品的價格。

≈ 通常 O(n log n)
🏆

排名次

段考成績、籃球聯賽積分榜——所有「排行榜」都需要排序。

≈ 各種排序
FUN FACT 你的手機每按一次「依時間排序」「依大小排序」,背後就有一個排序演算法在跑。10 年前的工程師會用 Bubble Sort 試試看;現在我們用 Tim Sort(混合 Merge + Insertion)。但要先懂 Bubble 和 Selection,才會欣賞後面更聰明的演算法。
🪞想一想P2
在你的日常生活或興趣裡,找一個「你在做排序」的情境——是用 Bubble 還是 Selection 的思維?
參考想法
很多日常排序其實是「混合策略」:你可能用 Selection 找最矮的、用 Insertion 在已排好的縫隙插入新東西。重點是你開始「察覺」生活中的排序——這就是計算思維的起點!
我對這個概念的掌握度:

把左邊的情境拖到右邊(或點選後再點目標欄)。猜對會看到解釋!

分數 0 / 6
情境
排序方式
🫧 Bubble Sort
相鄰交換
🎯 Selection Sort
找最小再交換
✅ 已排好
什麼都不用做
🪞想一想P2
寫一個「需要排序、但不知道用哪種」的情境,並說明你會怎麼選。
參考想法
選擇排序策略的關鍵問題:① 資料量多少?少於 50 筆怎麼選都差不多;② 資料是否「幾乎排好」?是的話 Bubble 比較快;③ 在意「交換成本」嗎?要搬重物時選 Selection(交換少)。沒有最好的排序,只有最合適的!
我對這個概念的掌握度: