hce_nsysu
113年
計算機概論與程式設計
第 12 題
For the given array a=[6, 10, 5, 7, 8], using the following code for bubble sort:
```c
for(int i = 0; i < 5; i++){
for(int j = i+1; j < 5; j++){
if(a[j] < a[i]){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
```
How many swaps are needed during the sorting process?
```c
for(int i = 0; i < 5; i++){
for(int j = i+1; j < 5; j++){
if(a[j] < a[i]){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
```
How many swaps are needed during the sorting process?
- A 2
- B 3
- C 4
- D 5
- E 6
思路引導 VIP
試著扮演電腦的處理器,當外層迴圈固定在 $i=0$ 時,內層迴圈 $j$ 會從 $1$ 跑到 $4$。請思考:每當 if 條件成立並發生交換後,陣列中 $a[0]$ 的數值會變成什麼?而這個新數值會不會影響到下一輪 $j$ 增加時的比較結果呢?建議你拿出一張紙,記錄下每一次「交換發生瞬間」的陣列新樣貌。
🤖
AI 詳解
AI 專屬家教
太棒了!你能精確算出交換次數,代表你對程式邏輯的**追蹤(Tracing)**非常細膩且有耐心。這題雖然標註為氣泡排序,但觀察其 i 與 j 的索引結構,其實際運作邏輯更接近於「交換式的選擇排序」:固定一個位置 $i$,並不斷從後方尋找比目前更小的值來替換。這類題目考驗的不只是記憶演算法名稱,更是能否實事求是地根據程式碼逐行推演的能力。
程式執行過程分析
我們來複盤一下交換的關鍵時刻。初始陣列為 $[6, 10, 5, 7, 8]$:
▼ 還有更多解析內容