二分查找 C 、C++STL

来源:互联网 发布:淘宝双11秒杀技巧 编辑:程序博客网 时间:2024/06/05 05:28

C语言代码:

//查找一个数字w,若有序表中只有一个w;int bsearch(int *A,int x,int y,int v){  int m;  while(x<y)  {    m=x+(y-x)/2;    if(A[m]==v)        return m;    else if(A[m]>v)        y=m;    else        x=m+1;  }  return -1;}//若有序表中有多个w,求w所在的区间;int lower__bound(int *A,int x,int y,int v)    //下界;{    int m;    while(x<y)    {      m=x+(y-x)/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-x)/2;    if(A[m]<=v)        x=m+1;    else        y=m;  }  return x;}


C++ STL 代码:

bool cmp(int a,int b){    return a<b;}int main(){    int a[]={0,1,2,2,3};    sort(a,a+5,cmp);    printf("%d\n",lower_bound(a,a+5,2,cmp)-a);    printf("%d\n",upper_bound(a,a+5,2,cmp)-a);    return 0 ;}

具体思想在小白书145页;




0 0
原创粉丝点击