我在測試Quicksort實施時出現問題。我被告知,當我們選擇一個數字(如中位數)作爲關鍵點時,算法會更好,但是,我的結果並不符合我的預期。通常情況下,當我選擇第一個或最後一個元素作爲數據透視表時,最好的情況就是這樣,並且它們都是隨機數,就像數組中的所有其他元素一樣。我正在進行大量測試(超過5000次)並檢查平均時間(沒有時間查找模式或中位數)。謝謝。當我選擇像中位數或模式這樣的數據透視表時,快速排序不工作速度更快
1
A
回答
2
計算數組的中位數或模式是一項昂貴的操作(特別是選擇中位數),所以即使您將獲得良好的支持,尋找這些支點的額外開銷可能會消耗大部分效率提升。
隨機快速排序(每次選擇隨機數據)最終會成爲一個更好的選擇。最糟糕的情況是幾乎不可能的,並且期望它在時間O(n log n)中運行。生成一個隨機或僞隨機數的方法比找到數組的中值或模式要快得多。
最後,如果你確實選擇了數組的模式,那麼就不能保證你有一個好的支點。事實上,如果你有一個沒有重複數組的數組,這可能會導致病態情況,並且你選擇模式的實現總是選擇最小值或最大值。這將退化爲Θ(n )時間。
希望這會有所幫助!
+0
我不會增加找到模式或中位數的時間。不過謝謝你 – user2938749
相關問題
- 1. 快速排序中位數選擇
- 2. Java快速排序數據透視選擇
- 3. 快速排序數據表
- 4. 如何提高我在python中的快速排序數據透視選擇?
- 5. 快速排序不工作
- 6. 如何修改此快速排序算法的數據透視選擇?
- 7. 如何使用固定數據透視表將迭代快速排序更改爲使用隨機數據透視的迭代快速排序?
- 8. 數據庫選擇快速更新
- 9. 如何排序比快速排序更快的整數數組?
- 10. 快速排序程序不工作?
- 11. 快速排序 - 爲什麼隨機數據透視?
- 12. 爲什麼我這樣做時我的MySQL查詢速度很快,而當我這樣做時速度很慢?
- 13. 通用快速排序不工作
- 14. 從兩個表中選擇速度快的數據
- 15. 快速排序不排序
- 16. 位數3快速排序執行
- 17. 選擇快速排序的關鍵點
- 18. 在數據庫表中快速定位
- 19. 速度更快? Struct數組或數據表
- 20. 使用隨機數據透視錶快速排序鏈接列表C
- 21. 快速排序程序停止工作
- 22. 選擇:哪個運行速度更快?
- 23. 的快速排序
- 24. 的快速排序
- 25. 我的快速排序在已排序的數據上崩潰
- 26. 快速篩選JSON數據
- 27. 使用快速排序排序數組
- 28. 快速HTML表格排序?
- 29. 讀取大量數據時速度更快:XML或SQLite
- 30. 快速排序不排序我的數組
當您看到代碼時,更容易調試代碼。 – AShelly
然後使用[梳理排序](http://en.wikipedia.org/wiki/Comb_sort)。每個人都歡欣鼓舞。 – user2864740
爲什麼你認爲選擇模式會使快速排序更快? o.o如果模式與min或max相同,可能會嚴重減慢quicksort。 – Shashank