中位数为O(n log n)的Quicksort

时间:2011-03-31 06:18:17

标签: algorithm quicksort median

我真的不明白为什么我们不总是选择中间元素作为支点。这可以在O(n)中完成,因此导致总运行时间为O(n log n)。

我只是假设在中位数搜索的O(n)中可能隐藏了一个大常量。

3 个答案:

答案 0 :(得分:7)

来自Wikipedia Quicksort page

  

相反,一旦我们知道最坏情况下的选择算法可用,我们就可以用它在快速排序的每一步找到理想的枢轴(中位数),产生一个运行最坏情况O(n log n)的变量时间。然而,在实际实施中,这种变体的平均速度要慢得多。

换句话说,强制保证O(n log n)的成本通常不值得付出。该页面以及selection algorithms页面上提供了更多信息。

答案 1 :(得分:0)

使用随机快速排序,你的O(n log n)运行时间最差,概率非常高。

答案 2 :(得分:0)

显然,使用随机版本的分区,找到中位数的运行时间似乎是O(n),但实际上当分区再次在其极端不平衡时,运行时间变为O(n 2 < / SUP>)。所以你不能从这里做任何改进。 但仍有希望。如果你经历过&#34; CORMEN&#34;然后你会发现,即使在最坏的情况下,也可以在线性时间内找到第i个订单统计数据。使用的技术是使用中位数作为枢轴元素,然后找到保证线性运行时间的nedian。 所以我们也可以在quicksort中使用该技术来获得O(nlgn)运行时间