電腦如何把雜亂的資料排得整整齊齊?從最直覺的兩種策略開始
氣泡排序的規則:相鄰兩個比大小,大的往右走,每一輪結束最大的會「冒泡」到最右邊。
[5, 2, 4, 1, 3] 排成 [1, 2, 3, 4, 5] 總共要交換幾次?
(猜完按下方「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
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
Bubble Sort 和 Selection Sort 都是 O(n²),那為什麼在很多情況下大家寧願選 Bubble?想兩個原因。
💡 點我看提示
Bubble 和 Selection 都是 O(n²)——意思是「資料量乘以 10,時間大約乘以 100」。
看看下面三組數字的差距,你會發現為什麼「演算法效率」這麼重要!
兩個都是 O(n²),但實務上有微妙差異:
| 場景 | Bubble Sort | Selection Sort |
|---|---|---|
| 最壞比較次數 | n(n-1)/2 | n(n-1)/2 |
| 最壞交換次數 | n(n-1)/2 | n-1(少很多!) |
| 已排好時的速度 | O(n)(加旗標可提早結束) | O(n²)(不管怎樣都全掃) |
| 穩定排序? | ✅ 是 | ❌ 否 |
我們每天都在不知不覺中做排序——只是沒意識到自己用了哪種策略。
找書架上最矮的那本,放到最左邊;再找剩下最矮的,放第二個...
≈ Selection Sort抽到新牌時,從手上的牌一張張往左比,找到位置塞進去。
≈ Insertion Sort前後兩個同學比身高,誰高就和前面交換——這就是氣泡排序!
≈ Bubble Sort根據你的喜好分數,把歌曲從高到低排——播放清單背後就是排序演算法。
≈ 通常 O(n log n)「價格低到高」這個按鈕——一秒幫你比較幾千件商品的價格。
≈ 通常 O(n log n)段考成績、籃球聯賽積分榜——所有「排行榜」都需要排序。
≈ 各種排序把左邊的情境拖到右邊(或點選後再點目標欄)。猜對會看到解釋!