二分搜索从有序序列中寻找某个给定的值。二分搜索从序列中间的位置开始搜索,如果中间位置的元素正好就是要找的元素,搜索完成;如果不是,假如该元素小于要找的元素,则在序列的后半部分继续搜索;假如改元素大于要找的元素,则在序列的qian前半部分继续搜索。在缩小的范围中计算一个新的中间元素并之前重复之前的过程,直至zui最终找到目标或者没有元素可供继续搜素。
例如:
vector<int>::iterator text;
auto beg=text.begin(),end=text.end();
auto mid=text.begin()+(end - beg)/2;//初始中间点
//当还有元素尚未检查并且我们没有找到sought时执行循环
while(mid !=end &&*mid !=sought){
if (sought < *mid)//没有找到sought元素,且要找的元素在前部分么
end = mid;//如果是,调整范围忽略后部分
else //如果我们要寻找的在后部分
beg =mid+1;//在mid之后找
mid =beg+(end -beg)/2;//新的中间点
}