快速排序修改的时间复杂度

时间:2015-02-16 16:13:15

标签: algorithm sorting data-structures time-complexity quicksort

让一个名为QUARTERSORT的函数获取一个数组并按以下方式对其进行排序:

  • 如果n <100;则使用常规QUICKSORT
  • 否则,我们会将数组拆分为A1 = A[1,...,n/4]A2 = A[(n/4)+1,...,n]
  • 然后,我们拨打QUARTERSORT两次:B1 = QUARTERSORT(A1)B2 = QUARTERSORT(A2)
  • 最后,我们合并B1B2

现在,为什么重现T(n) = T(0.25n) + T(0.75n) + O(n)而不是T(n) = T(0.25n) + T(0.75n) + O(nlogn)

3 个答案:

答案 0 :(得分:1)

重复是T(n) = T(0.25n) + T(0.75n) + O(n),因为算法的每一步都是O(n)。将数组拆分为2个部分为O(n),合并这两个部分为O(n),因此每个步骤都是O(n),这样我们就可以得到T(n) = T(0.25n) + T(0.75n) + O(n)的总数

答案 1 :(得分:1)

直观地说,你可以忽略关于quicksort的部分,因为它只发生在小n上,而big-O表示法只讨论n的“足够大”的值。所以算法的部分是:

  1. 1/4输入的递归调用:T(1/4 * n)
  2. 3/4输入的递归调用:T(3/4 * n)
  3. 合并:O(n)
  4. 更正式一点:快速排序的时间复杂度为O(1)。可以安全地忽略此添加,因为时间复杂度中有较大的部分,如O(n)

答案 2 :(得分:1)

快速排序需要O(n)才能找到支点。找到枢轴后,它将保持不变。

2个子问题的大小是O(N / 4)和O(3N / 4),因此重现是

T(n) = T(0.25n) + T(0.75n) + O(n)