21. 以下為插入排序(insertion sort)的程式碼,A 是一個整數陣列,請問以下那個 A 陣列會讓line5 被執行最少次?

【不叫賭俠的陳小刀】評論
我們可以觀察每個選項對應的陣列 A,然後計算 line 5 被執行的最少次數。在這段插入排序程式碼中,line 5 是指 A[i+1] = key 這一行。我們要找出讓 A[i+1] = key 被執行最少次數的陣列。讓我們依次檢查每個選項:(A) A = [1, 2, 3, 4, 5, 6, 7, 8]這個陣列已經是按升冪排序的,所以在執行插入排序時,不需要執行任何一次 A[i+1] = key。因為 A[i] <= key 對所有的 i,所以 line 5 永遠不會被執行。插入排序只在找到一個比 key 更小的元素時,才會執行這行。所以,這個選項會使 line 5 被執行最少次數。(B) A = [8, 7, 6, 5, 4, 3, 2, 1]這個陣列是按降冪排序的,每一個元素都需要向左移動到它正確的位置,因此 line 5 將在每次迭代中都被執行。(C) A = [7, 5, 3, 1, 2, 4, 6, 8]這個陣列不是完全排序的,但是也有幾個已經按升冪排序的子陣列。在這種情況下,插入排序在處理子陣列時只會執行少量的 A[i+1] = key 操作。(D) A = [2, 3, 2, 3, 2, 3, 2, 3]這個陣列有多個連續的相同元素。在迭代過程中,line 5 會在相同元素的部分重複執行。綜合考慮,選項 (A) A = [1, 2, 3, 4, 5, 6, 7, 8] 將使 line 5 被執行最少次數。