程式設計基礎(虛擬碼追蹤)

下列程序 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
  1. Ai
  2. Bn − i
  3. 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]。
練習這個領域 前往領域頁面

相關計算工具

程式設計基礎(虛擬碼追蹤)的其他題目

  1. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。下列程式在以遞增順序排好的整數型陣列 data(元素編號從1開始)中,把第一個大於或等於 x 的值的元素編號求到 lo。x 不大於 data 的最後一個元素。程式中的【a】應填入下列何者?
  2. 以元素數為5的整數型陣列 st 與整數型變數 top 表示堆疊。st 的元素一開始全為0,top 從0開始。push(v) 先把 top 加1再執行 st[top] ← v,pop() 回傳 st[top] 的值後把 top 減1(不改變 st 的元素)。執行下列程式後 top 與 st 為下列何者?
  3. 有一個把元素數為4的字串型陣列 q 環狀使用的佇列。head 與 tail 的初值為1,enq(v) 執行 q[tail] ← v 後再執行 tail ← tail mod 4 + 1,deq() 回傳 q[head] 的值後執行 head ← head mod 4 + 1。執行下列程式時,「E」會存放在 q 的哪個元素?
  4. 下列程式從元素編號1的元素開始,依序走訪以陣列 next 連接元素的鏈結串列並輸出。陣列的元素編號從1開始。next 的值0表示串列的結尾。輸出的值的順序為下列何者?
  5. 下列程式在以陣列 next 連接的鏈結串列 A → C → E → D → B 中,把 val[6] 的「F」插入到「C」(元素編號3)的正後方,再從元素編號1的元素開始依序走訪並輸出。陣列的元素編號從1開始。next 的值0表示串列的結尾。為使輸出為 A, C, F, E, D, B,【a】應填入下列何者?