我读了一些在网上找到的二进制搜索算法,在我遇到的所有例子中我都注意到了这段代码。

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/

10-11 22:23