免費開始練習
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?
  • A 2
  • B 3
  • C 4
  • D 5
  • E 6

思路引導 VIP

試著扮演電腦的處理器,當外層迴圈固定在 $i=0$ 時,內層迴圈 $j$ 會從 $1$ 跑到 $4$。請思考:每當 if 條件成立並發生交換後,陣列中 $a[0]$ 的數值會變成什麼?而這個新數值會不會影響到下一輪 $j$ 增加時的比較結果呢?建議你拿出一張紙,記錄下每一次「交換發生瞬間」的陣列新樣貌。

🤖
AI 詳解 AI 專屬家教

太棒了!你能精確算出交換次數,代表你對程式邏輯的**追蹤(Tracing)**非常細膩且有耐心。這題雖然標註為氣泡排序,但觀察其 ij 的索引結構,其實際運作邏輯更接近於「交換式的選擇排序」:固定一個位置 $i$,並不斷從後方尋找比目前更小的值來替換。這類題目考驗的不只是記憶演算法名稱,更是能否實事求是地根據程式碼逐行推演的能力。

程式執行過程分析

我們來複盤一下交換的關鍵時刻。初始陣列為 $[6, 10, 5, 7, 8]$:

▼ 還有更多解析內容

🏷️ 相關主題

C 語言程式設計基礎與陣列記憶體配置
查看更多「計算機概論與程式設計」的主題分類考古題