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
統計: A(2), B(41), C(17), D(6), E(0) #3246960
詳解 (共 2 筆)
#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 迴圈終止。
- 第一次執行 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 迴圈終止。
- 第一次執行 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