二分搜索是几大搜索算法之一,对于有序的数列可以做到快速搜索一个数,二分搜索的算法题一般要求返回搜索目标的索引值或者索引值的取值范围。
二分搜索的核心如下:
int left=0,right=n-1;
int mid;
while(left<=right)
{
mid=left+(right-left)/2;
if(a[mid]>target)
{
right=mid-1;
}
if(a[mid]<target)
{
left=mid+1;
}
if(a[mid]==target)
{
cout<<mid<<endl;
break;
}
}
n是数组的最大值,需要注意的是使用二分法的前提是搜索序列已经排好序。
解读如下
如果搜索值并不存在,如果搜索值小于数组中的每一个数,则循环结束时,right=-1,如果搜索值大于数组中的每一个数,则循环结束时,left=n;