您的位置:首页 > 其它

二分查找模板

2016-08-01 10:11 267 查看
int lower(int l,int r,int key)
{
while(l<r)
{
int mid=l+(r-l)/2;
if(a[mid]==key) r=mid;
if(a[mid]<key) l=mid+1;
if(a[mid]>key) r=mid;
}
return l;
}
int upper(int l,int r,int key)
{
while(l<r)
{
int mid=l+(r-l+1)/2;
if(a[mid]==key) l=mid;
if(a[mid]<key) l=mid;
if(a[mid]>key) r=mid-1;
}
return l;
}
int binary(int l,int r,int key)
{
while(l<r)
{
int mid=l+(r-l)/2;
if(a[mid]==key) r=mid;
if(a[mid]<key) l=mid+1;
if(a[mid]>key) r=mid;
}
if(a[l]==key) return l;
else return -1;
}

binary在找不到相同元素时返回-1,upper和lower会返回满足条件的第一个位置

double fsearch(double l,double r,double key)
{
while(r-l>e)
{
double mid=l+(r-l)/2;
if(key<mid) r=mid;
else l=mid;
}return l;
}


浮点二分时,不用考虑边界问题

double threesearch(double l,double r)
{
double m1,m2;
while(r-l>e)//e是自定义精度
{
m1=l+(r-l)/3;
m2=r-(r-l)/3;
if(val(m1)<val(m2)) l=m1;//val是自定义函数
else r=m2;
}
}
三分
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: