今天重点复习了二分查找,收获颇多。注意要先将数组排成有序数列:sort(a+1,a+1+n)
1.二分查找分为向左和向右查找,如果是向左的话,会找到第一次出现的位置,向右的话会找到最后一次出现的位置。
2,向左查找:
while(l<r)
{
int mid=l+r>>1;
if(a[mid]>=x) r=mid;
else l=mid+1;
}
3.向右查找:
while(l<r)
{
int mid=l+r+1>>1;
if(a[mid]<=x) l=mid;
else r=mid-1;
}
3.当有浮点数进行二分时:
double l,r
while(l<r)
{
double mid=(l+r)/2;
if(a[mid]>=x) r=mid;
else l=mid;
}
注意:是double mid=(l+r)/2 而不是double mid=l+r>>1。
——————————————————————————————————————————
例题:
需要注意的是l和r的取值。
2.浮点数的例题
注意:循环的条件为while(r-l>1e-5). l和r的取值自行取大。