2017-09-12 40 views
1

假設我們有一個標準的雙向分區QuickSort算法,它總是在第一個元素上旋轉。但是,在QuickSort的這個輕微變體中,我們首先交換第一個和中間元素,然後在「新」第一個元素上旋轉。我的問題是,這會改變最糟糕的運行時間嗎?在每個分區中交換中間和第一個元素的快速排序

我最初的想法是否定的,因爲在每個子數組中,元素仍然是相對於彼此的隨機順序,因此切換第一個和中間元素不會改變整體運行時。但是,因爲我有興趣找到最壞的情況,所以我不確定是否有一些「特殊」數組會導致這種輕微的變體來改變原始算法的最壞情況運行時。

回答

1

快速排序最糟糕的情況是數據透視始終是最小值或最大值。考慮到這一點,就可以構建一個最壞情況下的數組:

  • [1,2](雙元件陣列中的每個元素是一個最小或最大)
  • [3,1,2]交換後產生上述
  • [1,3,2]預交換
  • [4,1,3,2]交換後產生上述
  • [1,4,3,2]預 - 交換
  • [5,1,4,3,2]交換後產生上述
  • [4,1,5,3,2]交換前
  • [6,4,1,5,3,2]交換後產生上述
  • [1,4,6,5,3,2]預交換
相關問題