#include <iostream>
#include <vector>
using namespace std;
int binarySearch(const vector<int>&, const int);
int main() {
vector<int> a = {0, 1, 2, 3, 4, 5};
cout << binarySearch(a, 4);//
return 0;
}
/*
* loを0に、hiをルックアップ配列の長さに、midをloとhiの平均に初期化する。
* いつ< hi midの値が目標値より小さい場合、loをmidに更新する+ 1;
* midの値が目標値より大きければ、次の反復ラウンドのためにhiをmidに更新する。
*/
int binarySearch(const vector<int>& v, const int target) {
int lo = 0, hi = v.size();
while (lo < hi) {
//ローを避ける+ hi 結果オーバーフロー
int mid = lo + (hi - lo) >> 1;
if (v[mid] == target)
return mid;
else if (v[mid] < target)
lo = mid + 1;
else
hi = mid;
}
return -1;//検索の失敗
}