l = -1; u = n;
while l+1 != u
m = l + (u-l)/2;
if x[m] < t
l = m;
else
u = m;
p = u;
if p >= n || x[p] != t
p = -1;
我们假设x [-1]&lt;在上面的代码中,t和x [n]> = t并且n> = 0。 上面的代码是一个修改过的二进制搜索,它可以在整数数组x [0..n-1]中返回整数 t 的第一个出现,而不是返回一个随机的一。
我的问题是这样的:
为什么以上代码总是停止?任何人都可以解释或证明它吗?
谢谢,
答案 0 :(得分:4)
因为在每次迭代中,l
和u
之间的差距在整数算术的约束内减半。所有(正)整数减半的序列必须最终达到1,这是终止条件。