无聊写了二分,没想到写得并不那么流畅,看来有的东西珍藏会缩水……
二分查找的原理很简单,我们要做得有以下几点:
1,如果是无序的一组原数据,我们首先要进行排序,这里我们假如从小到大的顺序
2,定义3个索引值,分别是 low high mid
3,不停的将我们的原数据集合一分为二,比较索引为mid的数据和查找的数据大小,若索引为mid的数据大于查找数据,则在刚才一分为二的数据集合的左边查找,相反则在右边去查找,基本原理就是这样,下面奉上代码:
#include<iostream>
#include<vector>
using namespace std;
typedef vector<int> INVECTOR;
int binarySearch(const INVECTOR&v,int x);
int main(int argc,char *argv[])
{
INVECTOR iv;
for(int i=0;i<8;i++)
{
iv.push_back(i * 10);
}
int iRet =binarySearch(iv,40);
cout<< iRet<<endl;
cin.get();
cin.get();
return 0;
}
int binarySearch(const INVECTOR&v,int x)
{
int low =0;
int high=(int)v.size() -1;
int mid=(low+high)/2;
while(low<=high)
{
int mid=(low+high)/2;
if (v[mid]<x)
{
low=mid+1;
}
else if(v[mid]>x)
high=mid-1;
else
return mid;
}
return -1;
}