我读了一些在网上找到的二进制搜索算法,在我遇到的所有例子中我都注意到了这段代码。
if (query > contents[midIndex])
{
minIndex = midIndex + 1;
}
else if (query < contents[midIndex])
{
maxIndex = midIndex - 1;
}
但这是为什么?我试过这样做:
if (query > contents[midIndex])
{
minIndex = midIndex;
midIndex = (minIndex + maxIndex) / 2;
}
else if (query < contents[midIndex])
{
maxIndex = midIndex;
midIndex = (minIndex + maxIndex) / 2;
}
这段代码在我做的所有测试中都有效,不是更快吗?如果不是更快,有人能解释第一段代码的逻辑吗?
最佳答案
好吧,我只能说,第一部分根本不是二进制搜索。(+它似乎甚至没有重新计算midIndex
变量)
二元搜索的目的是“集中”搜索在总范围的“一半”,直到频谱缩小到我们一直在寻找的元素…
关于algorithm - 二进制搜索算法的困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9780849/