对于这个给定的问题,我想再次提出:
考虑一种随机快速排序算法的变体,其中随机选择枢轴,直到以较低的子数组L和较大的子数组G都对数组进行分区为止 包含数组元素的3/4。例如,如果随机选择的枢轴 对数组进行分区,以使L包含1/10的元素,然后再包含另一个 枢轴是随机选择的。分析该算法的预期运行时间。
起初,我把这个问题当作只是一个常规的快速排序问题,然后在以下地方再次出现:
[\s.]*
如果我们有一个算法总是将拆分始终为1/4:3/4,那将是有意义的。但是我们在这里使用随机旋转,每当不满足分配条件时旋转旋转。我知道随机快速排序的最坏情况运行时间仍为O(n ^ 2),但我认为在这种情况下,最坏情况现在有所不同(比O(n ^ 2)还差)。到目前为止,我走在正确的轨道上吗?
答案 0 :(得分:1)
快速排序的时间复杂度永远不会超过O(n^2)
,除非您选择了一些花费O(n)
时间来选择枢轴的逻辑。
选择枢轴的最佳方法是随机元素或末端或第一个元素。
答案 1 :(得分:0)
有n/2
个错误的数据透视。假设您从未两次选择同一数据透视表(如果这样做,最坏的情况总是选择一个错误的数据透视表,即无限的时间),在最坏的情况下,您会重复分区n/2
次,这导致{{ 1}}分区阶段的复杂性。复发变为
Θ(n^2)