我一直在阅读我在互联网上找到的一些二进制搜索算法,并且在我遇到的所有示例中都注意到了这段代码。
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;
}
该代码适用于我所做的所有测试,是不是更快?如果不是更快,有人可以解释第一段代码的逻辑吗?
答案 0 :(得分:1)
嗯,我只能说,第一部分根本不是二元搜索。 (+它似乎甚至没有重新计算midIndex
变量)
二进制搜索的目的是将搜索“聚焦”在总范围的“一半”中,直到频谱缩小到我们一直在寻找的元素......
答案 1 :(得分:0)
You can achieve binary search by loop or recursion and there are so many code
在互联网上。二进制搜索的原理就像在书中搜索一页一样。页面是有序的,你每次都会查找一半。这是你第一段代码的原则。
About the speed of the two segments,I think they are not whole.Binary search is
不是那么容易,应该注意一些细节。请谷歌吧!