Algorithm 二进制搜索算法混乱
我一直在阅读一些在互联网上找到的二进制搜索算法,我注意到在我遇到的所有示例中都有这段代码Algorithm 二进制搜索算法混乱,algorithm,search,binary,Algorithm,Search,Binary,我一直在阅读一些在互联网上找到的二进制搜索算法,我注意到在我遇到的所有示例中都有这段代码 if (query > contents[midIndex]) { minIndex = midIndex + 1; } else if (query < contents[midIndex]) { maxIndex = midIndex - 1; } if(查询>内容[midIndex]) { minIndex=midIndex+1; } else if(查询内容[midIn
if (query > contents[midIndex])
{
minIndex = midIndex + 1;
}
else if (query < contents[midIndex])
{
maxIndex = midIndex - 1;
}
if(查询>内容[midIndex])
{
minIndex=midIndex+1;
}
else if(查询<内容[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;
}
if(查询>内容[midIndex])
{
minIndex=midIndex;
midIndex=(minIndex+maxIndex)/2;
}
else if(查询<内容[midIndex])
{
maxIndex=midIndex;
midIndex=(minIndex+maxIndex)/2;
}
这段代码在我所做的所有测试中都有效,不是更快吗?如果不是更快,有人能解释一下第一段代码的逻辑吗?好吧,我只能说,第一部分根本不是二进制搜索。(+它甚至似乎没有重新计算
midIndex
变量)
二进制搜索的目的是将搜索集中在整个范围的“一半”,直到光谱缩小到我们一直在寻找的元素
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
不是那么容易,有一些细节应该注意。请谷歌为它 我希望您正在做与示例相同的事情(除了您没有像应该做的那样消除midIndex的值,因此它们是+-1)。寻找更多为下一个循环重新计算midIndex的代码。为什么您希望它更快?对不起,我有误解。你错了吗?没有;但是你忘了提到
intimid=(imin+imax)/2代码>部分(我指的是维基百科的文章)在您发布的初始代码中。。。这有很大的不同,嗯?即使这样,+-1不是没有必要吗?不,不是。原因如下:假设从范围(0..10)开始。是我们的测试元素
元素[5]
?如果是,则搜索到“更高范围”。。。那是哪一个?(5..10)? 还是(6..10)?简单地说,“重新检查”元素[5]是没有意义的,因为我们已经知道它不是我们要找的那个。。。(test\u element
大于element[5]
对吗?)这就是我们要做的,即使它小于。。。搜索(0..4),而不是搜索(0..5).;-)还有一个问题,为什么while循环(imax>=imin)上的大多数条件是?等号必要吗?