quicksort:如何选择枢轴元素,输入和最坏情况的性能?

时间:2015-05-05 17:06:09

标签: performance algorithm pivot quicksort

据我所知,quicksort上的阅读帖子是对枢轴元素的选择会极大地影响它是否以特定输入的最坏情况运行。

我问自己

  1. randomized枢轴元素是否可以最小化(但不排除)在n^2

  2. 中运行的机会
  3. input必须满足deterministic pivot element所遇到的条件,例如总是选择第一个元素作为枢轴,以便n^2成为现实。

  4. 我如何输入,以便最坏情况的表现成为现实?

  5. 其他人已经给出了一个已排序数组的例子,它是一个极端情况下的升序或降序。

    我认为这与splitting procedureelement < pivot的指针(反之亦然)以及不利的枢轴元素使分割过程成本更高的方式有关。

    可能会有人在一个简单的例子上显示array [1,2,3]和枢轴[0]如何满足最坏情况的表现,以便我可以看到这一切是如何相互关联的。

1 个答案:

答案 0 :(得分:2)

  1. 是的,一个随机的枢轴元素只会使最坏的情况变得不可能。

  2. 一个充分的条件是,给定一个长度为 n 的数组,枢轴的选择总是将它分成两个数组,其中一个长度为 O(1)< / EM>

  3. 假设您有一些规则,在调用 i 时,算法会选择位置 v(n,i)values的元素>作为pivot元素(你给出的例子是 v(n,i)= 0 总是,即算法总是查看第一个元素)。然后设置:

    values_0 [v(n,0)] = 0

    values_1 [v(n,1)] = 1

    values_2(v(n,2)] = 2

    ...

  4. 其中values_i是从原始数组形成的数组,省略 v(n,j)处的元素 j&lt;我

    关于[1,2,3]和0的示例,据我所知,它没有很好地定义。您无法使用固定的pivot元素获得完整的最坏情况示例,因为递归永远不会结束。