資料結構與演算法

在合併排序中,把已依升冪排序的兩個序列 1, 4, 7, 9 與 2, 3, 8, 10,以「比較兩者開頭並輸出較小者」的方式反覆進行,合併成一個序列。其中一個序列變空時,其餘部分不比較直接輸出。比較次數為幾次?

  1. A4次
  2. B7次
  3. C8次
查看答案與解析

正確答案:B. 7次

依序比較1與2、4與2、4與3、4與8、7與8、9與8、9與10,此時第一個序列已空,剩下的10不比較直接輸出。比較共7次,相當於合併長度 m 與 n 的序列時的最多次數 m + n − 1 = 7。合併只需把已排序的序列從開頭各看一次,為 O(m + n),合併排序重複 log₂ n 層,因此整體為 O(n log n)。

  • A. 並不是只比較其中一個序列長度的次數就夠了。值會交替輸出,因此比較次數較多。
  • B. 正確。只有最後的10不比較直接輸出,比較共7次。
  • C. 最後一個元素沒有比較的對象,因此不會是8次。
練習這個領域 前往領域頁面

相關計算工具

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

  1. 將二元堆積以根為 a[0] 的陣列 a[0], a[1], a[2], … 存放,從上層開始每層由左往右依序填入。a[4] 的子節點與父節點為下列何者?
  2. 以根為 a[0] 的陣列表示父節點值大於或等於子節點值的最大堆積。對堆積 50, 30, 40, 10, 20, 35 加入45:先放在末尾,只要比父節點大就與父節點交換。操作後的陣列為下列何者?
  3. 以中序走訪(依左子樹、該節點、右子樹的順序拜訪)走訪二元搜尋樹時,拜訪到的節點值會如何排列?假設所有值都不相同。
  4. 對空的二元搜尋樹依序插入 50, 30, 70, 20, 40, 60, 80。以後序走訪(依左子樹、右子樹、該節點的順序拜訪)走訪此樹時,順序為下列何者?
  5. 對空的二元搜尋樹依序插入 1, 2, 3, …, 1000(不做平衡的操作)。在這棵樹中尋找1000時,從根部開始比較,到找到為止要比較幾個節點?