二分查找时间复杂度为O(logn),只适合在有序数数据中查找,其随机访问的特性决定了其底层的数据结构只能为数组。
最简单(无数据重复)的代码实现如下:
int binsearch(int array[],int len, int value)
{
int begin=0,end=len-1;
int mid=begin+(end-begin)>>1;
while(begin<=end){
if(array[mid]>value){
high=mid-1;
}elseif(array[mid]<value){
low=mid+1;
}else{
return mid;
}
return -1;
}
变体一:查找第一个值等于给定值得元素(有重复数据)
int binsearch_1(int array[],int len, int value)
{
int begin=0,end=len-1;
int mid=begin+(end-begin)>>1;
while(begin<=end){
if(array[mid]>value){
high=mid-1;
}elseif(array[mid]<value){
low=mid+1;
}else{
//相等时还不能确定是不是第一个等于给定值的位置,
//在查到第一个元素或者前一个元素不等于给