二分查找 C 、C++STL

本文介绍了C语言中的二分查找算法实现,包括如何查找单个元素及确定多个相同元素的范围,并展示了C++ STL中lower_bound与upper_bound函数的应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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页;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值