让一个名为QUARTERSORT的函数获取一个数组并按以下方式对其进行排序:
n
<100;则使用常规QUICKSORT A1 = A[1,...,n/4]
和A2 = A[(n/4)+1,...,n]
。B1 = QUARTERSORT(A1)
和B2 = QUARTERSORT(A2)
。B1
和B2
。现在,为什么重现T(n) = T(0.25n) + T(0.75n) + O(n)
而不是T(n) = T(0.25n) + T(0.75n) + O(nlogn)
?
答案 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
的“足够大”的值。所以算法的部分是:
T(1/4 * n)
T(3/4 * n)
O(n)
更正式一点:快速排序的时间复杂度为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)