我一直在阅读我在 Internet 上找到的一些二进制搜索算法,并且在我遇到的所有示例中都注意到了这段代码。
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/