二分查找原理:
先确定一个中间值(左+右)/2,如果中间值等于要找的数,则直接结束,如果不是,看目标值比它大还是小,如果目标值比中间值大,则在右半部分继续找;如果目标值比中间值小,则在左半部分继续找,直到左区间大于右区间为止,确定找到还是没找到这个数。代码方面用递归进行实现。
注意:二分查找一个数,所在的序列必须是有序序列!!!
代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int binarysearch(vector<int>& vec,int left,int right,int target)
{
if (left > right) return -1;
int mid = (left + right) / 2;
if (target == vec[mid]) return 1;
else if (target < vec[mid])
{
return binarysearch(vec, left, mid - 1, target);
}
else if (target > vec[mid])
{
return binarysearch(vec, mid + 1, right, target);
}
return -1;
}
int main()
{
vector<int> a = { 0,1,2,3,4,5,6,7,8,9 };
cout<<binarysearch(a, 0, 9, 13);
return 0;
}