我看过很多二分搜索的例子,很多方法如何优化它,所以昨天我的讲师写了代码(在这段代码中,我们假设第一个索引从 1 开始,最后一个索引是 N,所以 N 是数组的长度,考虑它在伪代码中。代码是这样的:
L:=1;
R:=N;
while( L<R)
{
m:=div(R+L,2);
if A[m]> x
{
L:=m+1;
}
else
{
R:=m;
}
}
这里我们假设数组是A,所以讲师说我们每次都不会浪费时间来比较元素是否在数组的中间部分,还有好处是如果元素不在数组中,index 说明了它的位置,所以它是最优的,他是对的吗?我的意思是我从 John Bentley 那里看到了很多类型的二进制搜索,例如(编程珍珠)等等,这段代码真的最优吗?在我的例子中它是用 pascal 编写的,但是语言不依赖。