【问题标题】:Time Complexity to Sort a K Sorted Array Using Quicksort Algorithm使用快速排序算法对 K 排序数组进行排序的时间复杂度
【发布时间】:2019-12-10 22:48:54
【问题描述】:

问题:

我必须分析时间复杂度以对几乎已排序的整数值列表进行排序(使用快速排序)。

我做了什么?

我已阅读 SO Q1SO Q2SO Q3this one

但是,我没有找到任何明确提到使用快速排序对 k 排序数组进行排序的时间复杂度的内容。

由于快速排序算法的时间复杂度取决于选择枢轴的策略,并且由于具有几乎排序的数据而有可能面临最坏的情况,为了避免最坏的情况,我使用了三个值的中位数(first, middle, last) 作为基准点,称为here

我怎么看?

由于在平均情况下,快速排序算法的时间复杂度为O(n log(n)),如here 所述,“对于任何非平凡的 n 值,分治算法将需要多次 O(n) 次,甚至如果数组几乎完全排序”,

如果最坏的情况没有发生,我认为使用快速排序算法对 k 排序数组进行排序的时间复杂度是O(n log(n))

我的问题:

如果我试图避免最坏的情况选择适当的枢轴并且如果最坏的情况没有发生,那么使用快速排序算法对 k 排序数组进行排序的时间复杂度是 O(n log(n)) 是否正确。

【问题讨论】:

    标签: algorithm sorting time-complexity quicksort


    【解决方案1】:

    当你说快速排序的时间复杂度时,它是O(n^2),因为默认情况下假设最坏的情况。但是,如果您使用另一种策略来选择枢轴,例如随机快速排序,则默认情况下您的时间复杂度仍将是 O(n^2)。但是预期的时间复杂度是O(n log(n)),因为最坏的情况发生的可能性很小。所以如果你能以某种方式证明最坏的情况是 100% 保证不会发生,那么你可以说时间复杂度小于O(n^2),否则,默认情况下,无论多么不可能,都会考虑最坏的情况。

    【讨论】:

    • 虽然运行时间会变慢一个常数因子,但使用median of medians 可以保证 O(n log(n)) 时间复杂度。然而,这在某种程度上是一种混合排序,因为插入排序通常用于对包含 5 个元素的组进行排序。
    • @rcgldr 感谢您提供“中位数中位数”的宝贵信息。
    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 2012-07-06
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多