5. 依據圖一中的程式作答。如果令 alist = [1, 5, 2, 4] ,呼叫圖中的程式: sort(alist),則標示為 PROB2 的指令 arr[j+1]=arr[j] 將會被執行幾次?
(A) 1 次
(B) 2 次
(C) 3 次
(D) 4 次

答案:登入後查看
統計: A(2), B(41), C(17), D(6), E(0) #3246960

詳解 (共 2 筆)

#6121088
程式碼的分析如下: sort(arr)...
(共 760 字,隱藏中)
前往觀看
10
0
#6427064

為了計算 arr[j+1]=arr[j] 這條指令被執行的次數,我們需要逐步追蹤 sort(alist) 函式的執行過程,其中 alist = [1, 5, 2, 4]。

初始狀態:arr = [1, 5, 2, 4],n = 4。 指令 arr[j+1]=arr[j] 的執行次數計數器:PROB2_count = 0。

外層迴圈:for i in range(1, n) i 將依序取值 1, 2, 3。

第一次迴圈:i = 1

  • key = arr[1],即 key = 5。(此時 arr 為 [1, 5, 2, 4])
  • j = i - 1,即 j = 0。
  • 內層 while 迴圈:while j >= 0 and key < arr[j]:
    • 條件判斷:j = 0 (滿足 j >= 0),key = 5,arr[0] = 1。
    • key < arr[j] (即 5 < 1) 為 False。
    • 因此,while 迴圈的條件不成立,內層迴圈不執行。
  • arr[j + 1] = key,即 arr[1] = 5。(列表沒有變化,仍然是 [1, 5, 2, 4])
  • PROB2_count 仍為 0。

第二次迴圈:i = 2

  • key = arr[2],即 key = 2。(此時 arr 為 [1, 5, 2, 4])
  • j = i - 1,即 j = 1。
  • 內層 while 迴圈:while j >= 0 and key < arr[j]:
    • 第一次執行 while 迴圈體:
      • 條件判斷:j = 1 (滿足 j >= 0),key = 2,arr[1] = 5。
      • key < arr[j] (即 2 < 5) 為 True。條件成立。
      • 執行 arr[j + 1] = arr[j]:arr[2] = arr[1],即 arr[2] = 5。
        • 此時 arr 變為 [1, 5, 5, 4]。
        • PROB2_count 增加 1,變為 1。
      • j -= 1,即 j 變為 0。
    • 第二次執行 while 迴圈體:
      • 條件判斷:j = 0 (滿足 j >= 0),key = 2,arr[0] = 1。
      • key < arr[j] (即 2 < 1) 為 False。條件不成立。
      • while 迴圈終止。
  • arr[j + 1] = key,即 arr[0 + 1] = 2,亦即 arr[1] = 2。
  • 此時 arr 變為 [1, 2, 5, 4]。
  • PROB2_count 為 1。

第三次迴圈:i = 3

  • key = arr[3],即 key = 4。(此時 arr 為 [1, 2, 5, 4])
  • j = i - 1,即 j = 2。
  • 內層 while 迴圈:while j >= 0 and key < arr[j]:
    • 第一次執行 while 迴圈體:
      • 條件判斷:j = 2 (滿足 j >= 0),key = 4,arr[2] = 5。
      • key < arr[j] (即 4 < 5) 為 True。條件成立。
      • 執行 arr[j + 1] = arr[j]:arr[3] = arr[2],即 arr[3] = 5。
        • 此時 arr 變為 [1, 2, 5, 5]。
        • PROB2_count 增加 1,變為 2。
      • j -= 1,即 j 變為 1。
    • 第二次執行 while 迴圈體:
      • 條件判斷:j = 1 (滿足 j >= 0),key = 4,arr[1] = 2。
      • key < arr[j] (即 4 < 2) 為 False。條件不成立。
      • while 迴圈終止。
  • arr[j + 1] = key,即 arr[1 + 1] = 4,亦即 arr[2] = 4。
  • 此時 arr 變為 [1, 2, 4, 5]。
  • PROB2_count 為 2。

外層迴圈結束。函式返回 [1, 2, 4, 5]。

因此,標示為 PROB2 的指令 arr[j+1]=arr[j] 共被執行了 2 次。

0
0