#include <iostream>
using namespace std;
int BinSearch(int *array,int n,int val)
{
if (n<=0||array==NULL)
{
return -1;
}
int from=0;
int to=n-1;
int mid=(from+to)/2;//当left和right的值较大的时候,其和可能溢出,所以应该写成mid=from+((to-from)>>1);
while (mid<to)
{
if (array[mid]==val)
{
return mid;
}
else
{
if (array[mid]<val)
{
from=mid+1;
}
else
{
to=mid-1;
}
}
mid=(from+to)/2;
}
if (array[mid]!=val)
{
return -1;
}
else
{
return mid;
}
}
int BinSearch2(int *array,int n,int val)
{
int from=0;
int to=n-1;
while (from<=to)
{
int mid=from+((to-from)>>1);
if (array[mid]>val)
{
to=mid-1;
}
else if (array[mid]<val)
{
from=mid+1;
}
else
{
return mid;
}
}
return -1;
}
int main(int argc,char *argv)
{
int array[]={1,3,4,5,7,8,9,11};
int len=sizeof(array)/sizeof(int);
int index=0;
for (int i=0;i<len;i++)
{
index=BinSearch2(array,len,array[i]);
if(index!=-1)
cout<<index<<":"<<array[index]<<endl;
}
index=BinSearch2(array,len,99);
if (index==-1)
{
cout<<"不存在这个数"<<endl;
}
}
二分查找及勘误
最新推荐文章于 2014-08-23 23:43:04 发布