程式設計基礎(虛擬碼追蹤)
下列程序 bubble 是將整數型陣列 data 以遞增順序排列的泡沫排序。swap(data, j, k) 是交換 data[j] 與 data[k] 的值的程序,陣列的元素編號從1開始。程式中的【a】應填入下列何者?
○bubble(整數型陣列: data)
整數型: n ← data的元素數
for (i 從 n 到 2 每次減 1)
for (j 從 1 到 【a】 每次加 1)
if (data[j] > data[j + 1])
swap(data, j, j + 1)
endif
endfor
endfor
- Ai
- Bn − i
- Ci − 1
查看答案與解析
正確答案:C. i − 1
外層的 i 表示該次掃描把最大值送到的位置(從末尾起為 n、n − 1、…、2)。內層比較 data[j] 與 data[j + 1],因此把 j 的終值設為 i − 1,就能比較到 data[i] 為止的相鄰元素,而不超出陣列的範圍。i = n 的第1次掃描把最大值移到 data[n],下一次到 data[n − 1] 為止,掃描的範圍逐次縮小一個。若【a】填 i,第1次掃描就會參照 data[n + 1]。
- A. i = n 時 j = n,會參照 data[n + 1],超出陣列的範圍。
- B. i = n 時 j 的終值為0而什麼都不比較等,掃描的範圍顛倒,無法正確排序。{5, 3, 8, 1, 4} 會變成 {3, 5, 1, 8, 4}。
- C. 正確。比較到 data[i] 為止的相鄰元素,把最大值送到 data[i]。