我正在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保證在該元素可以被插入,使得列表仍然排序的位置?這是有效的,而使用等於或不等於?
爲什麼downvote,這是一個很好的問題,我展示了我的嘗試。 –
'while(l