如果您選擇中間元素(位於中間位置的元素,而不是中值位置)作爲關鍵點,最差情況下的快速排序最緊的上限是多少?使用中間元素作爲支點進行快速排序的最壞情況的上限是多少?
回答
使用線性時間中值樞紐選擇(和@n.m.的評論)的確定性快速排序具有O(n log n)最差情況下的性能。
http://en.wikipedia.org/wiki/Quicksort#Selection-based_pivoting
你總是可以將你的數組分成三部分:'
「確定性快速排序總是存在O(n^2)最差的情況。」 - 使用隨機性的人也是如此,只是除非你知道要生成的「隨機」數字(即PRNG的種子),否則不能構造所述最壞情況。雖然我不確定爲什麼你提到你的示例輸入是最糟糕的情況,因爲它也會是使用隨機性的,並且它不是使用衆所周知的優化利用重複的最壞情況。 – Dukeling
@ n.m。你是對的,我忘了這個明顯的伎倆。使用線性時間中值選擇算法,可以得到O(n log n)。 –
如果中間元素你指的是輸入數組的中位數則即使在最差情況下的時間複雜度爲O(nlogn)
,但如果你的意思是排序的數組的中間元素則是在最壞的情況下O(n^2)
,因爲它在最壞情況下會導致不平衡分區0:n-1。但在平均情況下,它仍然是O(nlogn)
快速排序的最差情況是O(n2)。平均情況是O(nlogn)。
O(n2)是最壞情況的上限。 O(nlogn)對於預期情況是嚴格的限制。
- 1. 使用第一個元素作爲支點快速排序
- 2. 快速排序算法狀態使用中間元素作爲支點
- 3. 快速排序與中間元素爲支點
- 4. 最壞的情況快速排序二叉樹
- 5. 快速排序最差情況
- 6. 以第一個元素爲快速排序的快速排序
- 7. 快速排序最差情況下的時間複雜度?
- 8. 在平均情況下排序數據的快速排序有多少?
- 9. 快速排序最糟糕的情況是什麼?
- 10. 試圖導致「更壞的情況」快速排序
- 11. 實現快速排序與中間元素作爲樞軸
- 12. 快速排序返回未排序的中間/中值元素?
- 13. 我們可以做快速排序與n logn最壞情況的複雜性?
- 14. 快速排序,第一個元素作爲關鍵點,快速代碼檢查
- 15. 爲什麼合併排序的最壞情況仍然是logn?
- 16. 中位數quicksort中位數的最壞情況時間複雜度是多少?
- 17. 序言:使用最後一個元素作爲主軸的快速排序(無限循環)
- 18. 快速帶O的最壞的情況下(N log n)的
- 19. 特殊情況下插入排序的最壞情況比較
- 20. 快速排序與樞軸中間元素不總是成功
- 21. 快速排序C++的第一個元素作爲樞紐
- 22. 快速排序算法不排序最終元素?
- 23. 在引擎爲InnoDB的表中,最壞情況下會鎖定多少行?
- 24. 使用隨機軸元素而不是中元素代碼快速排序
- 25. 以最後一個元素爲轉軸快速排序python
- 26. 跟蹤最壞情況執行時間
- 27. 快速排序進入無限循環
- 28. 使用快速排序C進行反向排序(降序)?
- 29. Ruby中的快速排序第一個元素是樞軸
- 30. 爲什麼快速排序被認爲是最快的排序算法?
中間位置或中間位置的項目? – user2357112
最糟糕的情況總是n平方,如果通過中間元素你的意思是中位數元素,那麼它不是最壞的情況了 – Leo
在中間位置的項目不是中位數 – user2331262