二分查找

来源:互联网 发布:tv263网络电视 编辑:程序博客网 时间:2024/06/12 18:26

二分查找的迭代实现:

int binary(int a[],int x,int y,int v){    int m;    while(x<y)    {        m=(x+y)/2;        if(a[m]==v)            return m;        else if(a[m]>v)            y=m;        else            x=m+1;    }    return -1;} 

二分查找求下界

int lower_bound(int a[],int x,int y,int v){    int m;    while(x<y)    {        m=(x+y)/2;        if(a[m]>=v)            y=m;        else            x=m+1;    }    return x;}

二分查找求上界

int upper_bound(int a[],int x,int y,int v){    int m;    while(x<y)    {        m=(x+y)/2;        if(a[m]<=v)            x=m+1;        else            y=m;    }    return y;}

用c++写程序的时候可以直接使用头文件
#include<algorithm>//STL算法的头文件,包含sort,lower_bound和upper_boundusing namespace std; 
eg:给出n个整数Xi 和m个询问,对于每个询问(a,b),输出闭区间[a,b]内的整数xi的个数

#include<cstdio>#include<algorithm>using namespace std;int v[10000];int main(){    int n,m,a,b;    scanf("%d%d",&n,&m);    for(int i=0;i<n;i++)        scanf("%d",&v[i]);    sort(v,v+n);    for(int i=0;i<m;i++)    {        scanf("%d%d",&a,&b);        printf("%d\n",upper_bound(v,v+n,b)-lower_bound(v,v+n,a));    }    return 0;}


0 0