學生背得出「二分搜尋比較快」,但一問 1024 個資料最多比較幾次就答錯。這一堂要學生親手數一次,把口號變成可算的數字。
本堂目標 學生能夠:① 講出泡沫、插入、選擇排序的分別;② 用追蹤表寫出一個排序的每一輪結果;③ 算線性搜尋與二分搜尋的比較次數(1024 個資料:1024 次對 10 次)。
01 先備知識(開課前 3 分鐘快檢)
以下任何一項未過關,本堂就會卡住,先補該項:
| 技能 |
快檢題 |
過關標準 |
| 陣列 |
陣列索引由 0 開始 |
最後一個索引是長度減一 |
| 迴圈 |
for 與 while 的分別 |
搜尋用 while 較自然 |
| 比較 |
大於、小於與等於 |
排序只靠兩兩比較 |
02 課堂流程(60 分鐘)
| 時間 |
環節 |
導師做什麼 |
學生做什麼 |
| 0–8 分 |
診斷 |
四個數字排一次序 |
口頭講步驟 |
| 8–22 分 |
三種排序 |
泡沫、插入、選擇 |
各寫一輪結果 |
| 22–36 分 |
追蹤表 |
每輪比較與交換 |
填滿表格 |
| 36–48 分 |
兩種搜尋 |
線性與二分 |
算出比較次數 |
| 48–56 分 |
題型訓練 |
改錯與計數題 |
按步驟作答 |
| 56–60 分 |
離場檢查 |
三題快問 |
口頭答案 |
03 講解腳本(照著說就可以)
第一幕:第一幕:三種排序其實只差「幾時交換」
泡沫排序:相鄰兩個比較,唔對就交換,每一輪把最大值推到尾。插入排序:逐個抽出,插入前面已排序的部分。選擇排序:每輪找最小值,放到前面。8 個資料,三者最壞情況都要做 28 次兩兩比較。
要學生做:同一組 8 個數字,用三種方法各寫第一輪結果。
易錯:以為選擇排序的比較次數會少過泡沫排序,其實最壞情況一樣。
導師做法:只要求學生寫「這一輪邊兩個比較過」,唔准寫完整程式。
第二幕:第二幕:線性搜尋係唯一唔需要排序的
線性搜尋逐個檢查,最壞要睇完 1024 個;好處是資料唔需要排序,一有新資料可以直接加在尾。平均只需一半,即 512 次左右。
要學生做:講出「邊種情況一定用線性搜尋」。答案:資料經常新增、未排序。
易錯:把平均數當成最壞數,答 512 次。
導師做法:要學生在 1024 個格畫面試找最尾一個,數住自己揭了幾多次。
第三幕:第三幕:二分搜尋每步斬一半
二分搜尋要求資料已排序。每次比較中間值,唔中就丟掉一半:1024 → 512 → 256 → 128 → 64 → 32 → 16 → 8 → 4 → 2 → 1,共 10 次。即 2 的 10 次方等於 1024,所以最壞比較次數是 log₂1024 = 10。
要學生做:自己數一次折半次數,核對答案。
帶出論點:1024 次對 10 次,差距約 102 倍。
導師做法:要學生先排序才准用二分搜尋,並且問「如果資料未排序,二分搜尋會出咩事」。
04 必教題型與步驟
| 題型 |
例子 |
步驟 |
答案 |
| 寫出一輪結果 |
定方向→兩兩比較→交換→寫該輪結果 |
只寫一輪,不寫全程序 |
| 追蹤表 |
每行記錄比較對象、交換與否、陣列狀態 |
每格一個動作 |
| 計算比較次數 |
判斷線性或二分→套公式→代入 n |
二分是 log₂n 向上取整 |
| 改錯題 |
檢查資料是否已排序→檢查中點計算→檢查界線 |
每題一個錯處 |
合理性檢查(一定要教):1024 個已排序資料,二分搜尋最壞 10 次,線性搜尋最壞 1024 次;答 11 次係錯,因為最後一次比較已經找到。8 個資料的氣泡排序最壞 28 次比較,三種簡單排序最壞情況相同。二分搜尋的前提是資料已排序,未排序就一定錯。
05 獨立練習三題
| 題目 |
答案 |
想觀察什麼 |
| 二分搜尋最壞比較次數(1024 個) |
10 |
log₂1024 |
| 線性搜尋最壞比較次數(1024 個) |
1024 |
逐個檢查 |
| 8 個資料的簡單排序最壞比較次數 |
28 |
8 × 7 ÷ 2 |
06 學生常見錯誤與糾正句
| 錯誤 |
學生通常這樣寫 |
導師這樣說 |
| 二分搜尋找 11 次 |
把最後一次失敗比較也算進去 |
「最後一次比較係唔係已經找到?」 |
| 未排序就用二分搜尋 |
直接對亂序陣列折半 |
「二分搜尋的前提係咩?」 |
| 混淆平均與最壞 |
線性搜尋答 512 次 |
「最壞係搵邊一個?」 |
| 以為選擇排序比較較少 |
答選擇排序 7 次 |
「每輪你比較了幾多個?」 |
07 家課建議(直接指到練習卷題號)
08 離場檢查(最後 5 分鐘)
| 題目 |
答案 |
判定 |
| 二分搜尋 1024 個的最壞次數 |
10 |
錯:重教折半 |
| 二分搜尋的前提 |
資料已排序 |
錯:重教前提 |
| 三種簡單排序最壞比較次數 |
28(8 個資料) |
錯:重教 n(n−1)/2 |
09 導師常問
為何二分搜尋要向上取整
折半到剩一個仍然要做最後一次比較,所以次數取上整。
實際程式會用哪種排序
多數語言內建排序用混合法,但考試只考三種簡單排序的邏輯。
何時線性搜尋反而更好
資料量細、經常新增、未排序時,線性搜尋省掉排序成本。
立即免費搵導師導師登記 →
本頁為 TutorZone 導師備課指引,內容由 TutorZone 團隊編寫;題目與流程為原創,並非任何學校或出版社的教材。