计算排序运行时间

时间:2017-08-21 04:58:36

标签: sorting counting

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;
}

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

任何人都可以解释为什么运行时间是O(n + k)。 ?

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

1 个答案:

答案 0 :(得分:1)

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

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

因此; O(n) = O(2n) = O(3n) .... = O(xn)

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