【问题标题】:Quicksort algorithm time complexity for a particular kind of array特定类型数组的快速排序算法时间复杂度
【发布时间】:2020-05-09 02:20:00
【问题描述】:
我正在学习算法课程,希望得到以下问题的帮助:
数组[k+1, ..., n, 1, ..., k] 上的快速排序算法的时间复杂度是多少,其中k > n/2,并且始终选择枢轴作为子数组的最右边的单元格?
是O(n²) 还是O(n log n)?
从上学期的扫描算法测试中,学生说O(n²)(经过几次模拟后我同意了),但该学生没有解释就答错了。
当我们三个人自己得出相同的结论时,我和其他几个学生对为什么答案被标记为错误感到困惑。
【问题讨论】:
标签:
arrays
algorithm
sorting
time-complexity
quicksort
【解决方案1】:
O(n²) 是正确的。
第一次运行将选择最右边的元素 k 作为枢轴,将数组的其余部分划分为左侧的 [1, ..., k-1] 和右侧的 [k+1, ..., n]。由于这两个子数组都是按排序顺序排列的,因此它们的形式是快速排序选择最右边的元素作为枢轴需要二次时间。
因此,对分区的左侧进行排序将花费 O(k²) 时间,而对右侧进行排序将花费 O((n-k)²) 时间。因为我们有n/2 < k <= n,所以我们也有 O(k²) = O(n²)。