Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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
二进制搜索期间检查的索引 我正在浏览我的C++书籍,我有一个关于二进制搜索的问题。有一个名为critter的数组,它(按顺序)填充着{auk,bat,cow,eel,elk,fox,gnu,pig,rat}_C++_Binary Search - Fatal编程技术网

二进制搜索期间检查的索引 我正在浏览我的C++书籍,我有一个关于二进制搜索的问题。有一个名为critter的数组,它(按顺序)填充着{auk,bat,cow,eel,elk,fox,gnu,pig,rat}

二进制搜索期间检查的索引 我正在浏览我的C++书籍,我有一个关于二进制搜索的问题。有一个名为critter的数组,它(按顺序)填充着{auk,bat,cow,eel,elk,fox,gnu,pig,rat},c++,binary-search,C++,Binary Search,因此,如果我想找到鳗鱼,我相信我会通过我书中给出的公式中的索引4->1->2->3。但是,如果要搜索数组中没有的内容,该怎么办 这本书告诉我算法是正确的 set found = false set first = 0 set last = n - 1 (n being the number of elements) while first <= last and !found do following: a) Calc loc = (first+last)/2 b) if

因此,如果我想找到鳗鱼,我相信我会通过我书中给出的公式中的索引4->1->2->3。但是,如果要搜索数组中没有的内容,该怎么办

这本书告诉我算法是正确的

set found = false
set first = 0
set last = n - 1 (n being the number of elements)
while first <= last and !found do following:
    a) Calc loc = (first+last)/2
    b) if item < a[loc] then
           set last = loc - 1
       else if a[loc] > item  then
           set first = loc + 1
       else
           set found = true
    end while
set-found=false
先设置为0
set last=n-1(n为元素数)
而第一项呢
先设置=loc+1
其他的
set found=true
结束时

因此,如果该项不存在,它是否会跳转到find=true,因为它不能<或>?或者它会遍历数组中的每个索引吗?

您会注意到当
first
不小于
last
时,循环将退出:
而首先,4-1-2-3不是我所认为的。4-2-3听起来更好。真正的问题是什么?如果搜索到的元素不在那里,它就不在那里。问题是在二进制搜索过程中,按照组件被检查的顺序给出元素的索引。所以它首先看4。eel小于数组[4],因此最后一个变为4-1=3。搜索的下一个对象是(first(0)+last(3))/2,由于它是int,所以舍入为1。它的>大于[1],所以第一个变为0+1=1。然后(1+3)/2=2,its>2,所以首先再次增加为1+1=2。然后看(2+3)/2=2和[2]<项目。再次增加,现在我们有(3+3)/2=3,它在[3]处,所以它被发现了。至少我是这么理解的。