【问题标题】:normal vs randomized quicksort on an array which is 1/3 sorted对 1/3 排序的数组进行正常与随机快速排序
【发布时间】:2021-03-15 15:33:50
【问题描述】:
我正在尝试计算在具有以下属性的数组上应用快速排序(随机或正常)的时间复杂度:
数组在前 2/3 中未排序,最大元素是 t
接下来的1/3是排序的,这里所有的元素都大于t\
我知道在正常的快速排序中,选择这两个部分之间的障碍导致不必对下一个 1/3 进行排序,但我找不到一种正式的(数学)方法来计算时间复杂度的渐近界。
提前致谢
【问题讨论】:
标签:
sorting
big-o
complexity-theory
quicksort
randomized-algorithm
【解决方案1】:
随机快速排序相当于先对数组进行洗牌,然后再应用简单快速排序。洗牌需要线性时间,因此无论部分排序的输入如何,您都可以获得快速排序的平均时间复杂度,即 O(n log n)。
朴素的快速排序将在这些输入上具有二次时间复杂度,因为最终元素 t 将被选为枢轴,并且 t 出现在排序区域之前,因此该区域将被选为整个分区。朴素的快速排序将在此分区上花费 (n/3) 的二次时间,这是 n 的二次时间。