在WikiPedia文章中,Binary Search
有一个名为的部分Deferred detection of equality
提供了一种“优化”的二进制搜索版本,如下所示:
int binary_search(int A[], int key, int imin, int imax)
{
while (imax > imin)
{
int imid = (imin + imax) / 2;
if (A[imid] < key)
imin = imid + 1;
else
imax = imid;
}
if((imax == imin) && (A[imin] == key))
return imin;
else
return KEY_NOT_FOUND;
}
据称这是比传统教科书二进制搜索更好的版本,因为这.... algorithm uses only one conditional branch per iteration
是真的吗?我的意思是if
指令被翻译成汇编指令CMP
,Branch
所以我不认为 anif-else
比 an 更好if-else if-else
是否存在这样的差异,我应该在更高级别的语言中考虑到这一点?if-else
我管理“延迟”版本的代码似乎更严格,但是您如何形成语句有优化或惩罚吗?