我了解到合并排序的时间功能就在下面。
T(n) = 2T(n/2) + Θ(n) if n>1
我理解为什么T(n) = 2T(n/2)+ A
但为什么A = Θ(n)
?
我认为A
可能会划分时间,但我不明白为什么它被表达为Θ(n)
请帮忙!
答案 0 :(得分:1)
不, A 不是分开的步骤。 A 是合并步骤,是线性的。
void merge(int a[], int b[], int p, int q, int c[])
/* Function to merge the 2 arrays a[0..p} and b[0..q} into array c{0..p + q} */
{
int i = 0, j = 0, k = 0;
while (i < p && j < q) {
if (a[i] <= b[j]) {
c[k] = a[i];
i++;
}
else {
c[k] = b[j];
j++;
}
k++;
}
while (i < p) {
c[k] = a[i];
i++;
k++;
}
while (j < q) {
c[k] = b[j];
j++;
k++;
}
}
当O(p + q)
和p
是子阵列长度并且此处为q
时,此合并步骤需要p + q = n
次。