二分查找也称折半查找(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; }