資料結構與演算法

以插入排序將有10個元素的陣列依升冪排列。依序取出第2個以後的元素,從左側相鄰的元素開始依序比較,直到找到小於或等於取出值的元素,或到達開頭為止。一開始就是升冪時與一開始是降冪時,比較次數的組合為下列何者?

  1. A都是45次
  2. B10次與100次
  3. C9次與45次
查看答案與解析

正確答案:C. 9次與45次

若已是升冪,取出的值只要與左側相鄰元素比較1次就能決定位置,9個元素合計9次。若是降冪,第 i 個取出的值要與左側全部 i 個元素比較,合計 1 + 2 + … + 9 = 45次。由此可見插入排序最佳為 O(n)、最差為 O(n²),會隨輸入大幅改變,對幾乎已排序的資料非常快。利用這個性質,先對間隔一定距離的元素進行插入排序的就是希爾排序,Timsort 等也會在短區間使用插入排序。

  • A. 比較次數固定為45次的是選擇排序。插入排序的次數會隨輸入的排列而變。
  • B. 元素數10或 10² 的100,並不是比較次數。
  • C. 正確。升冪時每個元素1次共9次,降冪時為 1 + 2 + … + 9 = 45次。
練習這個領域 前往領域頁面

相關計算工具

資料結構與演算法的其他題目

  1. 即使在最差情況下時間複雜度也是 O(n log n),且幾乎不使用工作用陣列等額外記憶體就能排序的演算法為下列何者?
  2. (姓名, 分數)的資料 (A, 80)、(B, 70)、(C, 80)、(D, 70) 依此順序排列。以穩定排序依分數升冪重新排列時,姓名的順序為下列何者?
  3. 快速排序的時間複雜度變成 O(n²) 的典型情況為下列何者?
  4. 在合併排序中,把已依升冪排序的兩個序列 1, 4, 7, 9 與 2, 3, 8, 10,以「比較兩者開頭並輸出較小者」的方式反覆進行,合併成一個序列。其中一個序列變空時,其餘部分不比較直接輸出。比較次數為幾次?
  5. 將二元堆積以根為 a[0] 的陣列 a[0], a[1], a[2], … 存放,從上層開始每層由左往右依序填入。a[4] 的子節點與父節點為下列何者?