【发布时间】:2015-09-30 02:47:07
【问题描述】:
我正在用 C++ 实现二进制搜索。这是我的代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int bs(vector<int> a, int val)
{
int l =0, r = a.size()-1;
while(l<=r) // Significance of ==
{
int mid = l + (r-l)/2;
if(a[mid]==val) return mid;
if(a[mid]>val)
{
r = mid-1; continue;
}
else
{
l = mid + 1 ;
}
}
return l; // Deliberately returning this
}
int main()
{
vector<int> a = {1,3};
cout << bs(a,1) <<endl;
return 0;
}
问题 1
在某些实现中,我看到人们使用
while(l<r)
虽然在某些情况下他们使用
while(l<=r)
偏爱一种方式有什么概念上的区别吗?如果我不使用 == ,任何可能的错误来源?
问题 2
如果找不到元素,是否保证 l 是可以插入元素的位置,以便列表仍然保持排序?这在使用等于或不使用等于时有效吗?
【问题讨论】:
-
为什么要投反对票,这是个好问题,我展示了我尝试过的内容。
-
while(l<r)在您的实现中不起作用,因为最后一个向量元素不在搜索范围内。
标签: c++ search binary-search