二进制搜索期间检查的索引 我正在浏览我的C++书籍,我有一个关于二进制搜索的问题。有一个名为critter的数组,它(按顺序)填充着{auk,bat,cow,eel,elk,fox,gnu,pig,rat}
因此,如果我想找到鳗鱼,我相信我会通过我书中给出的公式中的索引4->1->2->3。但是,如果要搜索数组中没有的内容,该怎么办 这本书告诉我算法是正确的二进制搜索期间检查的索引 我正在浏览我的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
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]处,所以它被发现了。至少我是这么理解的。