计数排序运行次

Counting sort running time

下面的代码片段来自这个 link

int[] countingSort(int[] a, int k) {
        int c[] = new int[k];
        for (int i = 0; i < a.length; i++)    //{1}
            c[a[i]]++;
        for (int i = 1; i < k; i++)           //{2}
            c[i] += c[i-1];
        int b[] = new int[a.length];
        for (int i = a.length-1; i >= 0; i--) //{3}
            b[--c[a[i]]] = a[i];
        return b;
}

表示运行ning时间为O(n+k)时间.k为输入范围 数组 a .

谁能解释一下为什么 运行ning 时间是 O(n+k)。 ?

如果我们查看代码片段并看到 {1} for 循环 运行s 在 n 时间,{2} 运行s 在 K 时间和第三个 运行s 也在 n 时间所以总 运行 时间应该是 O(2n+k) 时间。我的计算不正确吗?这里忽略常量2了吗?

你的计算也是正确的,因为O(2n+k) = O(n+k).

对于时间复杂度,只有多项式的次数是重要的,而不是系数。

所以; O(n) = O(2n) = O(3n) .... = O(xn)

请阅读https://en.wikipedia.org/wiki/Time_complexity#Linear_time