sort()函数的用法

6 篇文章 0 订阅
订阅专栏

        sort(v.begin(),v.end(),cmp),它是用来对一组序列进行排序的。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,包含在头文件为#include<algorithm>的c++标准库中。

        其有三个参数,前两个参数是待排序区间;第三个参数可有可无(第三个参数代表比较规则),没有第三个参数的时候,sort()默认按升序排列,有第三个参数的时候,可以通过这个参数实现各种各样的排序,包括降序。sort()函数功能强大就是强大在第三个参数。

        sort()函数除了可以对int型、char型、double型、字符串排序外,还可以实现对结构体、链表、pair、vector、等类型进行排序,但需要自己写比较函数。而且sort()既可以对数组排序,也可以对vector容器排序。下面就先说一下sort()只有两个参数时的用法,具体代码见下:

 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 #include<algorithm>
 5 using namespace std;
 6 int main()
 7 {
 8     int a[10]={6,5,4,8,3,9,7,10,1,2};
 9     char b[8]={'h','z','l','n','m','r','d','g'};
10     vector<double> v1;
11     vector<string> v2;
12    
27     sort(a+1,a+9);    //可以指定任意合法的排序区间,不能越界
30 
35     sort(b,b+8);     //对整个b排序
38 
43     sort(v1.begin(),v1.end());//输入两个迭代器从而排序一个范围
46 
51     sort(v2.begin(),v2.end());

55     return 0;
56 }

上面几种方法都是升序排列,要想按降序排列,有3种方法可以实现:

1. sort()函数只有两个参数时默认升序排列,在排完序后,再用reverse()函数把整个序列给翻转一下,这样序列就变成了降序。

27     sort(a+1,a+9);    //可以指定任意合法的排序区间,不能越界
31     reverse(a+1,a+9);

39     sort(b,b+8);     //对整个b排序
43     reverse(b,b+8);

46 
51     sort(v1.begin(),v1.end());
55     reverse(v1.begin(),v1.end());

63     sort(v2.begin(),v2.end());
67     reverse(v2.begin(),v2.end());

2. 借助c++标准库来实现降序(或升序)。此时要包含头文件<functional>,<functional>头文件提供了一些基于模板的比较函数对象,这里在排序的时候只用到了 greater<type>() 和 less<type>() 两个;让 greater<type>() 或 less<type>() 做sort()函数的第三个参数来实现升序或降序排列;其中greater<type>() 用于降序排列,less<type>() 用于升序排列

14     sort(a,a+10,greater<int>());//降序排列

19     sort(a,a+10,less<int>());//升序排列

 

3. 第三个方法是自己写一个比较函数来实现升序或降序排列,并让这个比较函数做sort()函数的第三个参数;比较函数不仅能实现升序降序排列,还能实现其他的功能。

这就是sort()函数功能强大的地方,它可以扩展,而扩展的关键就是第三个参数。

    先说一下比较函数,当你想实现特定比较方式的时候,就要自己定义一个返回bool值的比较函数了;这时sort()函数的第三个参数就是一个函数,如果它返回假值就交换操作对象的位置,返回真值的话操作对象位置不变。下面就用比较函数来实现升序降序的排列:

首先实现比较函数,注意比较函数参数数据类型要与需要比较的对象一致:

 5 bool cmp1(int a,int b)  //按降序排列
 6 {
 7     return a>b;
 8 }
 9 
10 bool cmp2(int a,int b)  //按升序排列
11 {
12     return a<b;
13 }

然后调用sort函数即可,此时不需要给比较函数传入参数,比较函数只是确定比较的规则。

23     sort(v.begin(),v.end(),cmp1);   //这里不需要对比较函数cmp1传入参数

28     sort(v.begin(),v.end(),cmp2);   不需要对比较函数cmp2传入参数

 另外比较函数可以用lambda表达式来写,这是leetcode  hot100的一道题:

首先需要对people的vector按照hi进行从小到大的升序排列,对于相同的hi再按照ki进行从大到小的降序排序,我们使用sort中第三个参数的强大功能,就能够自己定义比较规则,一条语句就能实现我们需要的排序。代码如下:

//排序,方法使用lambda表达式
		sort(people.begin(), people.end(), [](vector<int>& a, vector<int>& b) -> bool {return (a[0] < b[0]) || ((a[0] == b[0]) && (a[1] > b[1])); });

lambda表达式详见https://www.cnblogs.com/jimodetiantang/p/9016826.html

可以定义创建匿名函数对象,从而简化编程工作。

这就是sort函数的强大之处,在我们平时的编程当中也会经常使用到。

sort 的几种用法
qq_42972267的博客
01-07 2952
sort()定义在头文件中。 sort 使用时得注明:using namespace std; 或 using std::sort; sort函数是标准模板库的函数,可以用于比较任何容器(必须满足随机迭代器),任何元素,任何条件,执行速度一般比qsort要快。 注意:缺省是升序排序。 Sort函数有三个参数: (1)第一个是要排序的数组的起始地址。 (2)第二个是结束的地址(最后一位要排序的地址)...
C++中的sort函数
weixin_30384217的博客
06-27 4853
(一)为什么要用c++标准库里的排序函数 Sort()函数c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高! (二)c++标准库里的排序函数的使用方法 I)Sort函数包含在头文件为#include<algorithm>的c++...
c++入门必学库函数 sort
weixin_52115456的博客
10-31 1万+
sortc++ algorithm 库里的一个排序函数。排序太常用了,如果每次都要自己写排序函数的话会浪费程序员大量的时间和精力,所以函数库里就写好了一些排序算法以供我们使用。sort()是不稳定的排序,底层使用的是快速排序算法,平均时间复杂度为O(n*log n)如果需要稳定排序可以使用stable_sort(),底层使用归并排序实现的,时间复杂度固定是O(n*log n)sort()和stable_sort()用法是一样的,下面我们只讲解sort()的使用。
排序(sort)的使用
最新发布
2302_79459176的博客
07-27 1032
比如我希望按成绩从高到低排要想使int数组从小到大(升序)排序,还可以写return a<b;若果我们要求数组a按x的值从小到大(升序)排序,若x相等,则按y值从小到大排序,可以写int x,y;}a[10];else。
[排序]SORT QSORT
ACM是什么?可以吃吗
03-23 1122
一.sort函数用法    排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件。     这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,
sort(分类)用法
Glede-ing
07-22 1919
1.sort(分类)用法sort命令选项很长,下面仅介绍各种选项。sort命令的一般格式为:sort -cmu -o output_file [other options] +pos1 +pos2 input_files 下面简要介绍一下sort的参数:-c 测试文件是否已经分类。-m 合并两个分类文件。-u 删除所有复制行。-o 存储s o r t
sort函数用法
CSUST_ACM的专栏
03-06 4630
sort函数用法 做ACM题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件。     这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,
详解Matlab中 sort 函数用法
09-02
下面将详细解释 `sort` 函数的各个用法及其参数。 ### 1. 基本用法:`B=sort(A)` 这个基本形式的 `sort` 函数用于对一维或二维数组进行升序排序。如果 `A` 是一维数组,`sort(A)` 将返回一个新的数组 `B`,其中...
C#中Arraylist的sort函数用法实例分析
12-31
本文实例讲述了C#中Arraylist的sort函数用法。分享给大家供大家参考。具体如下: ArrayList的sort函数有几种比较常用的重载: 1.不带参数 2.带一个参数 public virtual void Sort( IComparer comparer ) 参数 ...
php数组排序usort、uksortsort函数用法
12-18
本文实例讲述了php数组排序usort、uksortsort函数用法。分享给大家供大家参考。具体用法分析如下: 对数组排序:usort() 函数使用用户自定义的函数对数组排序,实例代码如下: 复制代码 代码如下:function cmp($a, $b...
关于sort函数的几种用法
shirley3052004的博客
06-07 1万+
随着练习代码的习题数量的增加,意识到了自己和系统学习c++的人之间还有很大的差距。今天学习的是sort函数,它是STL中可以直接调用的排序类函数,以下是我从另一篇博客中摘取的,自己用起来简单顺手的部分。 1.要使用sort函数只需用#include 即可使用,语法描述为: sort(begin,end),表示一个范围,例如: int _tmain(int argc, _TCHA
sort()函数用法
Sunflower的博客
01-22 1万+
sort()函数 一: 简介 sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include“algorithm”的c++标准库中。 Sort(start,end,cmp) (1)start表示要排序数组的起始地址; (2)end表...
sort用法
碳酸钙的01妖精的博客
06-23 619
sort用法  sort基础 #include &lt;algorithm&gt; sort(first_pointer,first_pointer+n,cmp); sort升级 bool cmp1(int a,int b)//int为数组数据类型 { return a&gt;b;//降序排列 //return a&lt;b;//默认的升序排列 } sort(A...
Sort函数用法
m0_62806440的博客
12-10 458
Sort函数用法
关于sort用法
dyyay521的博客
03-12 7976
今天来学习一下sort这个神奇的东西吧!1.要使用sort函数只需用#include &lt;algorithm&gt; 即可使用,语法描述为:sort(begin,end),表示一个范围,例如:#include&lt;bits/stdc++.h&gt;          //万能头文件using namespace std;int main()  {  int a[20]={2,4,1,23,5...
sort函数用法
热门推荐
huqiaolong的博客
04-10 2万+
sort函数是一个非常强大的排序函数用法如下://使用sort函数进行升序排序#include &lt;stdio.h&gt;#include &lt;algorithm&gt;//sort函数所在的函数库using namespace std;//sort所在的标准命名空间int main(){ int n; int i; int buffer[100]; while(~scanf("%d",&...
sort()的用法
xiaojing的博客
04-02 936
今天面试的时候,被问到:给一个数组,怎么随机打乱数组。当时被问到的时候第一时间想到了Math.random()的方法,即用random产生在数组长度以内的下标值,可是这样的话,怎么控制产生下标不会重复呢,所以我又想到了set,将每一次产生的下标保存到set中,产生跟数组相同长度的集合,这样来打乱数组。然而这种做法有很大很大的问题,因为random是随机产生数据,可能执行了无数n次才能得到固定长度的
list.sort使用方法
06-13
list.sort() 是 Python 中用来对列表进行排序的方法。它不会返回一个排序后的新列表,而是会直接修改原来的列表,使其按照升序排列。如果需要按照降序排列,可以使用 `list.sort(reverse=True)`。 例如,以下是一个使用 `list.sort()` 进行排序的示例: ```python my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] # 对列表进行排序 my_list.sort() print(my_list) ``` 输出结果: ``` [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] ``` 注意,`list.sort()` 方法只能用于列表,不能用于其他类型的序列。如果需要对其他类型的序列进行排序,可以使用 `sorted()` 函数
写文章

热门文章

  • sort()函数的用法 32493
  • 基于51单片机的按键控制超声波测距及显示(带提示音)的实现 27909
  • 利用Debug调试代码解决0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突 10787
  • 利用MATLAB计算SPWM脉冲宽度与并应用STM32输出 7112
  • 长腔耗散孤子锁模光纤激光器 5928

分类专栏

  • 算法与数据结构 4篇
  • c++ 6篇
  • 设计模式
  • 其他 1篇
  • Qt 1篇
  • 单片机 2篇
  • 激光 4篇
  • MATLAB 1篇
  • 生活 1篇

最新评论

  • 利用Fabry-Perot扫描干涉仪测量激光的纵模

    syy1561: 您好,请问您在FP干涉仪之前使用了聚焦透镜吗,我看说明书说需要有聚焦透镜使光打在FP腔中间

  • 基于51单片机的按键控制超声波测距及显示(带提示音)的实现

    zyh200309: 请问还有仿真文件吗 3516723841@qq.com

  • sort()函数的用法

    mmsksksk: algorithm

  • sort()函数的用法

    mmsksksk: algorithm

  • 利用Fabry-Perot扫描干涉仪测量激光的纵模

    m0_67882820: 博主,您好,能和您交流一下嘛

最新文章

  • 无限远校正显微镜 物镜的放大倍数如何计算?
  • 算法笔记(三)-排序算法的稳定性、综合排序算法、比较器、桶排序
  • 算法笔记(二)-快速排序,桶排序
2021年10篇
2018年2篇
2017年4篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

天下网标王沁阳网站自然优化收费情况昆山网站搜索优化方案临沂吉安营销型网站优化营销沙头站长网站优化石景山网站快速优化紫云网站优化公司江门设备网站seo优化敦煌网站优化咸宁外包网站优化哪里好东莞怎样优化网站长春网站优化电池网站优化工作网站全网优化推广联系方式云浮首页网站关键词优化费用安阳网站外包优化手动优化网站天津大型网站优化泰安网站seo优化方案邯郸网站优化推广渠道中山外贸网站优化原理宿迁综合网站优化是真的吗商丘网站建设及优化网站制作小程序推广整站优化深圳快速网站优化广告网站如何提高体验优化网站怎么优化实质选云速捷欣誉铜陵网站优化怎么收费多少网站单词优化怎么选宣城pc网站优化低成本媒体网站优化的方法香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化