我在测试Quicksort实现时遇到了问题。有人告诉我,当我们选择一个像中位数作为数据的数字时算法会更好,但是,我的结果不是我所期望的。通常,当我选择第一个或最后一个元素作为pivot时,最好的情况就会发生,并且它们都是随机数,就像数组中的所有其他元素一样。我正在进行大量测试(超过5000)并检查平均时间(没有时间查找模式或中位数)。谢谢。
答案 0 :(得分:2)
计算阵列的中位数或模式是一项昂贵的操作(特别是选择中位数),所以即使你会获得良好的支点,找到这些支点的额外开销也可能会耗费你的大部分效率。
随机快速排序(每次选择随机数据)最终成为实践中更好的选择。它的最坏情况是指数级不可能的,并且在预期时它会在时间O(n log n)内运行。生成随机或伪随机数的速度比找到数组的中值或模式要快。
最后,如果您确实选择了阵列的模式,那么您无法保证获得良好的支点。事实上,如果你有一个没有重复的数组,并且你选择模式的实现总是选择最小值或最大值,这可能导致病态情况。这将退化为Θ(n 2 )时间。
希望这有帮助!