C++排序二分查找

简单来说就是输入一个数组,注意是无序的,因为二分查找只能查找有序的,所以在给数组赋值之后,对数组进行排序。排序的方法有很多,在此我写的是冒泡排序,排序之后是降序的。
在这里插入图片描述
其中bubblesort(int array[],int length),length代表数组长度,int array[]可以替换成int * array ,没有影响。

对于降序,C++sort函数有着很好的应用。 在此给出链接,这位大佬写的非常好 https://blog.csdn.net/liuzuyi200/article/details/8974326。
我自己也写了两种,如下。
1如图,sort排序,greater是降序,less是升序。C++用sort别忘了加#include<algorithm>
在这里插入图片描述
2.自己编写比较函数,因为sort(array,array+N)默认是升序的,要降序得自己写一个比较函数。
在这里插入图片描述
降序return a>b,升序return a<b.

好了说完排序,该进入二分查找。
在这里插入图片描述
在这里插入图片描述
切记二分查找的升序和降序写法是不一样的,要改一下循环里面的代码!!!
查找完如果存在元素输出下标,不存在即告知用户,输出提示信息。

鉴于每次都自己写二分查找可能会出错,所以可以使用C++ STL中的binary_search. 划重点: STL中的二分查找只适用于升序! 降序不能用!!
在这里插入图片描述
binary_search(array,array+N,key);
array代表数组首地址,
array+N代表数组首地址加数组元素个数,
最后一个是要查找的值
返回值类型为bool,也可以转成int,找到为真返回1,没找到为假返回0。

但binary_search只能检测数组里有没有这个元素,只能告诉你结果是有还是没有,有的话是无法输出元素下标的。

关于数组也可以使用容器vector,方法有很多,暂时先写到这。谢谢。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ STL实现二分查找的函数有三个:lower_bound、upper_bound和binary_search。 lower_bound函数用来查找第一个不小于给定值的元素,如果存在多个相同的元素,则返回第一个出现的位置。 upper_bound函数用来查找第一个大于给定值的元素,如果存在多个相同的元素,则返回第一个大于给定值的位置。 binary_search函数用来判断给定值是否在有序容器中出现,如果存在则返回true,否则返回false。 在给出的代码中,使用了lower_bound函数来查找数组a中是否存在与b相等的元素,如果存在,则将其赋值给ans变量。 需要注意的是,使用这些函数前需要先对容器进行排序,以保证二分查找的正确性。可以使用algorithm头文件中的sort函数对容器进行排序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [STL之二分查找](https://blog.csdn.net/jfkidear/article/details/100171041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [C++ STL中的 二分查找](https://blog.csdn.net/shuaizhijun/article/details/88982556)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值