从紫皮书过来的,但是书中内容讲的比较简洁,做一点补充笔记。


一、排序(sort函数)

头文件:<algorithm>

语法:sort(start,end,cmp);

start,end必须,cmp不必须。

参数

(1)start表示要排序数组的起始地址;
(2)end表示数组结束地址的下一位;
(3)cmp用于规定排序的方法,可不填,默认升序。
排序方法:快排。时间复杂度为n*log2(n),执行效率较高。
默认情况递增排序(cmp参数为less<>())
如果要实现递减排序,cmp不缺省,填greater<数据类型>()(从大到小的意思)
对于目标数组a[n]进行升序排序,这样用:sort(a,a+n);
(理解:a是数组的第一个下标的地址,n为个数,即从头到尾。)
对于目标vector容器,使用:sort(v.begin(),v.end());
另外,如果要给自定义的数据类型排序,需要定义(重载)<运算符,并传入cmp中。

二、搜索(bound类)
切记搜索的前提是排序完的数组!!(原理是二分查找)
下面引用CSDN博主的文章:

在从小到大的排序数组中,

lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

在从大到小的排序数组中,重载lower_bound()和upper_bound()

lower_bound( begin,end,num,greater<type>() ):从数组的begin位置到end-1位置二分查找第一个小于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

upper_bound( begin,end,num,greater<type>() ):从数组的begin位置到end-1位置二分查找第一个小于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

---------------------
作者:brandong
来源:CSDN
原文:https://blog.csdn.net/qq_40160605/article/details/80150252

就lower_bound来看,他寻找的是第一个大于等于x的数,那么找不到的情况即使有返回也不一定是正确的。所以要返回头重新判断一下。

int  p = lower_bound(a,a+n,x) - a;  //此时得到下标

if (a[p] == x)  ....

大概是这样了,不全。等以后遇到再补充。

最新文章

  1. css实现div,文字水平居中的方案。
  2. 将list集合的元素按照添加顺序的倒序进行排列取出
  3. 解决安装office2013时提示已安装相同版本的office
  4. IOS刷新数据
  5. [Everyday Mathematics]20150116
  6. cocos2d与cocos2d-X中的draw和update
  7. Linux - CentOS6.5服务器搭建与初始化配置详解(上)
  8. android 点击下弹动画实现
  9. 替换NavigationController里面的返回按钮
  10. WIN7操作平台获取管理员权限批处理
  11. [原创]K8Cscan插件之端口扫描C#源码
  12. 【try..catch..】【判断输入是否为空】【onchange事件】【onmouseover和onmouseout事件】【onmousedown和onmouseup事件】
  13. 46.Scrapy框架结构
  14. 2017-2018-2 20155314《网络对抗技术》Exp1 PC平台逆向破解(5)M
  15. 树莓派使用iperf3测量网络带宽
  16. runtime实现weak属性
  17. centos删除用户出错userdel: user xxx is currently used by process 23750
  18. Multi account chang login with multi -thread
  19. 《linux内核设计与实现》第一章
  20. 后缀自动机(SAM)速成手册!

热门文章

  1. Docker小白到实战之开篇概述
  2. 实战爬取Plati官网游戏实时最低价格-Python
  3. gRPC学习之五:gRPC-Gateway实战
  4. APP渗透测试之安卓APP抓包
  5. Pytest-Allure报告的Logo的完美定制
  6. 【转】新说Mysql事务隔离级别
  7. 前端下载文档的java工具类
  8. Linux的基础——虚拟机的克隆
  9. 剑指offer 计划1(栈与队列)---java
  10. Spring Boot 入门系列(二十三)整合Mybatis,实现多数据源配置!