主要分为六种情况,闭区间,半开区间,中位值在循环之外的半开区间二分查找首个序列,中位值在循环之外的半开区间二分查找末尾序列,以及中位值在循环之外的完全开区间二分查找首个序列和中位值在循环之外的完全开区间二分查找末尾序列:
#include <iostream>
#include <vector>
#include <assert.h>
using namespace std;
// closed interval
int binarySearchClose(vector<int> &invec, int &pos, int &value){
int low = 0, high = pos-1;
assert(!invec.empty() && pos>=0);
while(low <=high){
int mid = (low+high)/2;
if(invec[mid] == value){
return mid;
}
else if(invec[mid] < value){
low = mid+1;
}
else{
high = mid-1;
}
}
return -1;
}
// open interval
int binarySearchOpen(vector<int> &invec, int &pos, int &value){
int low = 0, high = pos;
while(low<