在最坏的情况下,使用枢轴中间元素快速排序复杂

时间:2014-07-08 15:27:17

标签: algorithm sorting complexity-theory quicksort

因为最坏情况下的快速排序复杂性是O(n ^ 2)

在第一个或最后一个选择枢轴的递增顺序情况下 元素它给出了正确的最坏情况复杂度O(n ^ 2),因为树的一个孩子总是空的

但是当枢轴被选中时,我感到困惑? 它将树分成一半,使其复杂度为O(n.logn)

让我们说10 20 30 40 50 60 70 pivot = 40

(10 20 30)40(50 60 70)

左侧枢轴20,右侧枢轴60

(10)20(30)

(50)60(70)

是否正确????

4 个答案:

答案 0 :(得分:1)

在您的示例中,您假设要排序的列表已经排序。

在这种情况下,当您总是选择第一个或最后一个项目作为支点时,快速排序确实会执行O(n ^ 2)。

如果选择中间项目,肯定会有不良表现。例如:

1 2 3 4 (5) 1 2 3 4

现在,由于没有高于5的项目,这是一个不好的支点,即使它是一个中间元素。

由于排序已排序列表是一种常见方案,因此使用第一个或最后一个项作为数据透视表被认为是一种不好的做法。一般来说,中间项目不太可能是一个不好的支点。

答案 1 :(得分:0)

关键是您要从未排序的数组中选择枢轴。所以价值是随机的。如果是你碰巧每次都选择最低值,分区左边没有任何东西。这意味着右侧的每个递归调用将比前一个少处理一个元素。粗略地说,这些调用完成的总工作量为O(i = n downto 1的sum(i)= O(n ^ 2)。

答案 2 :(得分:0)

选择轴时,列表将被分区,以使枢轴左侧的元素小于枢轴,右侧的元素更大。此时,如您所述,排序问题不会分成两半。

选择枢轴后,您需要对左右分区进行排序。这将涉及为每个分区选择一个新的枢轴。快速排序以递归方式进行,直到只有一个左右分区。

我建议您查看快速排序算法,并从头到尾手动完成几个示例。

如果您是视觉学习者,以下动画会有所帮助:http://www.csanimated.com/animation.php?t=Quicksort

答案 3 :(得分:-1)

使用中间枢轴元素进行快速排序的最坏情况时间复杂度为O(n ^ 2)。 由于中间元素始终是排序和反向排序情况的极端元素。