合并Sort的递归版本的运行时间

时间:2017-03-27 15:00:10

标签: algorithm time-complexity mergesort

我了解到合并排序的时间功能就在下面。

T(n) = 2T(n/2) + Θ(n) if n>1

我理解为什么T(n) = 2T(n/2)+ A

但为什么A = Θ(n)

我认为A可能会划分时间,但我不明白为什么它被表达为Θ(n)

请帮忙!

1 个答案:

答案 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次。