algorithm - 归并排序在递归版本中的运行时间

标签 algorithm time-complexity mergesort

我了解到归并排序的时间函数就在下面。

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

我明白为什么 T(n) = 2T(n/2)+ A

但是为什么 A = Θ(n)

我觉得A可能是时间的划分,但是我不明白为什么要表示成Θ(n)

请帮忙!

最佳答案

不,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++;
    }
}

pq 是子数组长度时,这个合并步骤需要 O(p + q) 时间,这里 p + q = n.

关于algorithm - 归并排序在递归版本中的运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43049886/

相关文章:

algorithm - 如何识别图像中的 UI 元素?

python - 如何降低程序的时间复杂度?

java - 使用归并排序对数组索引进行排序

c - 递归归并排序的实现

c++ - 范围缩减 单精度浮点精度差

c++ - 对大量对进行排序

c# - 新类型由 decimal 和 double 组成

algorithm - 连通分量计数算法的运行时间

algorithm - 一段代码的大O复杂度

java - 实现合并排序算法的工作线程