【发布时间】:2017-08-21 13:11:31
【问题描述】:
下面这个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 在这里被忽略了吗?
【问题讨论】: