答案 0 :(得分:3)
外部loop
将运行2N
次。 (int j = 2 * N
),然后每次按1
)递减
由于N
没有变化,i
的值N
总是(int i = N
),内部loop
将始终运行logN base 2
次。{
(请注意i
更改i = i div 2
)
因此,复杂性为O(NlogN)
答案 1 :(得分:1)
问题:当你反复输入一半(或搜索空间)时会发生什么?(就像在二进制搜索中一样)。
答案:嗯,你得到 log(N)的复杂性。 (参考: Steven S. Skiena的算法设计手册)
查看算法中的内部循环,i = i div 2
使其成为 log(N)复杂性循环。因此,总体复杂性将是 N log(N)。
带上一点盐:每当你将输入(搜索空间)除以2,3,4或任何大于1的常数时,你的复杂度就会log(N)
。
P.S。 :算法的复杂性远不及 O(1)。