算法——二分查找法实现及优化

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。

//第一代版本

int binarySearch(T arr[],int n ,T target){
  int l=0,r=n-1; //搜索范围为[l,r]
  while(l<=r)    //当l=r时范围仍有效[l,r]
  {
    int mid=(l+r)/2;
    if(arr[mid]==target)
    {
      return mid;
    }
  if(arr[mid]>target)
  {
    r=mid-1;    //搜索范围为[l,mid-1]
  }
  else
  l=mid+1 ;    //搜索范围为[mid+1,r]
    }

  return -1;
 }

修改后的算法考虑了大数相加会溢出的情况,进行优化。

//第二代版本

int binarySearch(T arr[],int n ,T target){
  int l=0,r=n; //搜索范围为[l,r)
  while(l<=r)    //当l=r时范围仍有效[l,r)
  {
    int mid=l+(r-l)/2;  //修改前为(l+r)/2,有可能会发生因两个大数之和导致的溢出,所以改为l+(r-l)/2
    if(arr[mid]==target)
    {
      return mid;
    }
  if(arr[mid]>target)
  {
    r=mid;    //搜索范围为[l,mid)
  }
  else
  l=mid+1 ;    //搜索范围为[mid+1,r]
    }

  return -1;
 }
原文地址:https://www.cnblogs.com/aishanyishi/p/9489407.html