資料結構與演算法

快速排序的時間複雜度變成 O(n²) 的典型情況為下列何者?

  1. A資料隨機排列,且隨機選擇樞紐(基準值)的情況
  2. B資料個數為2的冪次的情況
  3. C資料已排序,且總是以開頭元素為樞紐的情況
查看答案與解析

正確答案:C. 資料已排序,且總是以開頭元素為樞紐的情況

快速排序把元素分成小於樞紐與大於樞紐的部分,再對各部分繼續分割。若資料已排序又總是以開頭為樞紐,每次樞紐都是最小值,分割會偏成「0個與其餘全部」,因此比較次數為 n(n−1)/2 次(n = 100 時為4,950次)。若隨機選擇樞紐,或取3個值的中位數,持續發生偏斜分割的可能性就非常小。資料個數與時間複雜度無關。

  • A. 隨機選擇時,持續偏斜分割的可能性非常小,平均為 O(n log n)。
  • B. 個數是否為2的冪次,與分割是否偏斜無關。
  • C. 正確。每次樞紐都是最小值,分割極度偏斜。
練習這個領域 前往領域頁面

相關計算工具

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

  1. 在合併排序中,把已依升冪排序的兩個序列 1, 4, 7, 9 與 2, 3, 8, 10,以「比較兩者開頭並輸出較小者」的方式反覆進行,合併成一個序列。其中一個序列變空時,其餘部分不比較直接輸出。比較次數為幾次?
  2. 將二元堆積以根為 a[0] 的陣列 a[0], a[1], a[2], … 存放,從上層開始每層由左往右依序填入。a[4] 的子節點與父節點為下列何者?
  3. 以根為 a[0] 的陣列表示父節點值大於或等於子節點值的最大堆積。對堆積 50, 30, 40, 10, 20, 35 加入45:先放在末尾,只要比父節點大就與父節點交換。操作後的陣列為下列何者?
  4. 以中序走訪(依左子樹、該節點、右子樹的順序拜訪)走訪二元搜尋樹時,拜訪到的節點值會如何排列?假設所有值都不相同。
  5. 對空的二元搜尋樹依序插入 50, 30, 70, 20, 40, 60, 80。以後序走訪(依左子樹、右子樹、該節點的順序拜訪)走訪此樹時,順序為下列何者?