【STL】二分查找算法||binary_search();||T * lower_bound();||T * upper_bound();

STL提供在排好序的数组上进行【二分查找算法】O (log 2 n)

  • binary_search();
  • T * lower_bound();
  • T * upper_bound();

头文件:#include <algorithm>

用binary_search进行二分查找

用法一

  • 从小到大排好序的基本类型数组中进行二分查找

                           binary_search(数组名+n1,数组名+n2,值);

  • n1和n2都是int类型的表达式,可以包含变量;n1=0,+n1可以省略
  • 查找区间为[n1,n2),在该区间内查找等于“值”的元素,找到返回true,找不到返回false
  • 等于:a等于b  <=>  a<b 和 b<a 都不成立

用法二

  • 在用自定义排序规则排好序的、元素为任意的T类型的数组中进行二分查找

                binary_search(数组名+n1,数组名+n2,值,排序规则结构名);

  • n1和n2都是int类型的表达式,可以包含变量;n1=0,+n1可以省略
  • 查找区间为[n1,n2),在该区间内查找等于“值”的元素,找到返回true,找不到返回false
  • 等于:a等于b  <=> “a必须在b前面” 和 “b必须在a前面” 都不成立
  • 查找时的排序规则,必须和排序时的规则一致!否则返回值为false

用lower_bound二分查找下界(大于等于值)

用法一

  • 在对元素类型为T的从小到大排好序的及基本类型的数组中查找

                       T * lower_bound(数组名+n1,数组名+n2,值);

  • 返回一个指针 T * p
  • *p 是查找区间里下标最小的,大于等于“值”的元素(下界)
  • 如果找不到,*p指向下标为n2的元素(不在查找区间里,查找区间后的第一个值)

用法二

  • 在用自定义排序规则排好序的、元素为任意的T类型的数组中查找

             T * lower_bound(数组名+n1,数组名+n2,值,排序规则结构名());

  • 返回一个指针 T * p
  • *p 是查找区间里下标最小的,按自定义规则,可以排在“值”后面的元素
  • 如果找不到,*p指向下标为n2的元素(不在查找区间里,查找区间后的第一个值)
  • 查找时的排序规则,必须和排序时的规则一致!否则返回值为false

用upper_bound二分查找上界(大于值)

用法一

  • 在元素类型为T的从小到大排好序的基本类型的数组中进行查找

                        T * upper_bound(数组名+n1,数组名+n2,值);

  • 返回一个指针 T * p;
  • *p 是查找区间里下标最小的,大于“值”的元素
  • 如果找不到,*p指向下标为n2的元素

用法二

  • 在用自定义排序规则排好序的、元素为任意的T类型的数组中查找

          T * upper_bound(数组名+n1,数组名+n2,值,排序规则结构名());

  • 返回一个指针 T * p;
  • *p 是查找区间里下标最小的,按自定义排序规则,必须排在“值”后面的元素
  • 如果找不到,*p指向下标为n2的元素
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值