資料結構與演算法

即使在最差情況下時間複雜度也是 O(n log n),且幾乎不使用工作用陣列等額外記憶體就能排序的演算法為下列何者?

  1. A合併排序
  2. B堆積排序
  3. C快速排序
查看答案與解析

正確答案:B. 堆積排序

堆積排序在陣列中建立二元堆積,並反覆把根部的最大值與末尾交換、縮小堆積,因此最差也是 O(n log n),額外空間只需常數。合併排序最差也是 O(n log n),但在陣列上進行時需要與 n 成正比的工作空間。快速排序平均為 O(n log n),實務上很快,但視樞紐的選法與資料而定,可能變成 O(n²)。此外,堆積排序會比較相距很遠的元素,因此快取效率差,也不是穩定排序。

  • A. 最差為 O(n log n),但在陣列上進行需要與 n 成正比的工作空間。
  • B. 正確。最差也是 O(n log n),只在陣列內部就能排序。
  • C. 平均為 O(n log n),但最差情況會變成 O(n²)。
練習這個領域 前往領域頁面

相關計算工具

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

  1. (姓名, 分數)的資料 (A, 80)、(B, 70)、(C, 80)、(D, 70) 依此順序排列。以穩定排序依分數升冪重新排列時,姓名的順序為下列何者?
  2. 快速排序的時間複雜度變成 O(n²) 的典型情況為下列何者?
  3. 在合併排序中,把已依升冪排序的兩個序列 1, 4, 7, 9 與 2, 3, 8, 10,以「比較兩者開頭並輸出較小者」的方式反覆進行,合併成一個序列。其中一個序列變空時,其餘部分不比較直接輸出。比較次數為幾次?
  4. 將二元堆積以根為 a[0] 的陣列 a[0], a[1], a[2], … 存放,從上層開始每層由左往右依序填入。a[4] 的子節點與父節點為下列何者?
  5. 以根為 a[0] 的陣列表示父節點值大於或等於子節點值的最大堆積。對堆積 50, 30, 40, 10, 20, 35 加入45:先放在末尾,只要比父節點大就與父節點交換。操作後的陣列為下列何者?