1/3 排序的数组上的正常与随机快速排序
normal vs randomized quicksort on an array which is 1/3 sorted
我正在尝试计算在具有以下属性的数组上应用快速排序(随机或正常)的时间复杂度:
数组前 2/3 未排序,最大元素为 t
接下来的1/3被排序,这里的所有元素都大于t\
我知道在正常的快速排序中,选择这两个部分之间的障碍会导致不必对下一个 1/3 进行排序,但我找不到正式(数学)方法来计算时间上的渐近界限复杂性。
提前致谢
随机快速排序相当于先打乱数组,然后应用朴素快速排序。洗牌需要线性时间,这样你就可以得到快速排序的平均时间复杂度,而不管输入是部分排序的,即 O(n log n)。
朴素快速排序在这些输入上将具有二次时间复杂度,因为最终元素 t 将被选为枢轴,并且 t 出现在排序区域之前,因此该区域将被整体选为分区。朴素的快速排序将在这个分区上花费 (n/3) 的二次时间,这是 n.
的二次时间
我正在尝试计算在具有以下属性的数组上应用快速排序(随机或正常)的时间复杂度:
数组前 2/3 未排序,最大元素为 t
接下来的1/3被排序,这里的所有元素都大于t\
我知道在正常的快速排序中,选择这两个部分之间的障碍会导致不必对下一个 1/3 进行排序,但我找不到正式(数学)方法来计算时间上的渐近界限复杂性。
提前致谢
随机快速排序相当于先打乱数组,然后应用朴素快速排序。洗牌需要线性时间,这样你就可以得到快速排序的平均时间复杂度,而不管输入是部分排序的,即 O(n log n)。
朴素快速排序在这些输入上将具有二次时间复杂度,因为最终元素 t 将被选为枢轴,并且 t 出现在排序区域之前,因此该区域将被整体选为分区。朴素的快速排序将在这个分区上花费 (n/3) 的二次时间,这是 n.
的二次时间