【发布时间】:2018-10-21 06:09:49
【问题描述】:
for (int p = t; p > 0; p >>= 1) {
for (int i = 0; i < n - p; ++i) {
if ((i & p) != 0) {
sort2(a, i, i+p);
}
}
for(int q = t; q > p; q >>= 1) {
for(int i = 0; i < n- q; ++i) {
if ((i & p) != 0) {
sort2(a, i+p, i+q);
}
}
}
}
这里n是某个正整数,t大于n/2,但不等于n。
据我了解,内部 for 循环运行了 (n-p) 次,但我无法弄清楚外部 for 循环。
我试着找到它如下:
如果t=64和n=100,则取p的二进制值,等于64,所以p=1000000base 2。
我了解每次减少一位数,在这种情况下总共执行 7 次。我不知何故无法弄清楚一般时间。
另外,我的理解是第三个 for 循环,即
for(int q = t; q > p; q >>= 1)
根本不执行,因为条件q>p 不满足p=q=t。
这是正确的吗?我只是从算法开始。
【问题讨论】:
-
左大括号比右大括号多,缩进没有帮助。
-
什么是
sort2?
标签: c++ algorithm time-complexity