【发布时间】:2019-12-10 22:48:54
【问题描述】:
问题:
我必须分析时间复杂度以对几乎已排序的整数值列表进行排序(使用快速排序)。
我做了什么?
我已阅读 SO Q1、SO Q2、SO Q3 和 this 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