[英]Quicksort algorithm time complexity for a particular kind of array
我正在學習算法課程,並希望對以下問題有所幫助:
數組
[k+1, ..., n, 1, ..., k]
上的快速排序算法的時間復雜度是多少[k+1, ..., n, 1, ..., k]
其中k > n/2
,並且總是選擇最右邊的樞軸子數組的單元格?它是
O(n²)
還是O(n log n)
?
從上一學期的掃描算法測試中,該學生說O(n²)
(我在幾次模擬后同意),但該學生沒有解釋就答錯了。 我和其他幾個學生很困惑,為什么當我們三個人都得出相同的結論時,答案被標記為錯誤。
O(n²) 是正確的。
第一次運行將選擇最右側的元素k
作為主元,將數組的其余部分划分為左側的[1, ..., k-1]
和左側的[k+1, ..., n]
正確的。 由於這兩個子數組都是按順序排列的,因此它們的形式是快速排序選擇最右邊的元素作為主元需要二次時間。
因此,對分區左側進行排序將花費 O(k²) 時間,對右側進行排序將花費 O((nk)²) 時間。 由於我們有n/2 < k <= n
,我們也有 O(k²) = O(n²)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.