Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 二进制搜索算法混乱_Algorithm_Search_Binary - Fatal编程技术网

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)上的大多数条件是?等号必要吗?