【排序函数讲解】sort-C++

c++标准库里的排序函数,用于对给定区间所有元素进行排序。头
文件是#include
使用 Sort()在具体实现中规避了经典快速排序可能出现的、会导
致实际复杂度退化到 o(n²)的极端情况。它根据具体情况使用不
同排序方法,效率极高。
sort 函数基本格式:
sort(首元素地址,尾元素地址的下一个地址,比较函数);
说明:排序方法可以是从大到小也可是从小到大,还可以不写第三
个参数,此时默认的排序方法是从小到大排序。
举例:下面就具体使用 sort()函数结合对数组里的十个数进行排
序做一个说明。
例一:sort 函数没有第三个参数,实现的是从小到大

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int a[10]={9,6,3,8,5,2,7,4,1,0};for(int i=0;i<10;i++)cout<<a[i]<<endl;sort(a,a+10);for(int i=0;i<10;i++)cout<<a[i]<<endl;return 0;
}

例二:从大到小排序
需要加入一个比较函数 cmp()

bool cmp(int a,int b)
{return a>b;
}

程序如下:

   #include<iostream>#include<algorithm>using namespace std;bool cmp(int a,int b){return a>b;}int main(){int a[10]={9,6,3,8,5,2,7,4,1,0};for(int i=0;i<10;i++)cout<<a[i]<<endl;sort(a,a+10,cmp);//在这里就不需要对 cmp 函数传入参数了,这是规则for(int i=0;i<10;i++)cout<<a[i]<<endl;return 0;}

例三:对结构体数据排序
假设自己定义了一个结构体 node

struct node
{int a;int b;double c;
}

有一个 node 类型的数组 node arr[100],想对它进行排序:先按 a
值升序排列,如果 a 值相同,再按 b 值降序排列,如果 b 还相同,
就按 c 降序排列。就可以写这样一个比较函数:
以下是代码片段:

bool cmp(node x,node y)
{if(x.a!=y.a) return x.a<y.a;if(x.b!=y.b) return x.b>y.b;return x.c>y.c;
}

例四:对字符串的排序
如:

string str[5]={“bbb”,”abc”,”cc”,”b”,”aaaa”};
sort(str,str+5);
for (int i=0;i<5;i++)cout<<str[i]<<endl;
//依次输出 aaaa,abc,b,bbb,cc

但是,如果是想按字符串的长度对 str 进行递增排序,则先定义
cmp 函数再调用。

bool cmp(string str1,string str2)
{return str1.length()<str2.length();
}

调用:sort(str,str+5,cmp);
输出:

for(int i=0;i<5;i++)cout<<str[i]<<endl;

//依次输出 b,cc,bbb,abc,aaaa

另外,在部分题目中会看到以下字样:对*****,按输入的顺序输出。
由于sort在排序过程中不是很稳定,如果有诸如此类的要求,请把sort替换成stable_sort,即稳定排序。(如果考试禁用请无视)

转载于:https://www.cnblogs.com/moyujiang/p/11167786.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[html] HTML5拖拽事件的顺序是什么?

[html] HTML5拖拽事件的顺序是什么&#xff1f; ondragstart &#xff1a;源对象开始被拖动 ondrag&#xff1a;源对象被拖动过程中 ondragend&#xff1a;源对象被拖动结束ondragenter&#xff1a;源对象拖动着进入目标对象 ondragover&#xff1a;源对象拖动着悬停在目标对方…

【翻译】eXpressAppFramework QuickStart 业务模型设计(十)——在代码中实现数据验证...

这一讲&#xff0c;你将学到如何给业务对象和他们的属性设置规则。最终用户在执行赋值操作后将验证这些规则。你可以实现必填规则使得Position.Title属性不能为空。此规则将在Position对象保存的时候被验证。你还能够看到打破规则的界面提示。在此之前&#xff0c;我建议你去读…

注册机patch起什么作用_电机滑环起什么作用?

电机滑环起什么作用?发电机滑环就是我们传统的集电环&#xff0c;用于电机的换向器上作为导出导入电流的滑动接触体&#xff0c;它的导电、导热以及润滑性能良好&#xff0c;并具有一定的机械强度和换向性火花的本能。几乎所有的电机都使用碳刷&#xff0c;它是电机的重要组成…

统考计算机应用基础多少分及格,网络教育统考难吗?统考多少分及格?

我们可以知道网络教育统考科目主要就是考计算机和英语两个科目&#xff0c;一定是全部通过才能顺利拿到网络教育本科毕业证的。那么网络教育统考难吗&#xff1f;网络教育统考多少分及格&#xff1f;一、网络教育统考难吗网络教育统考难度实际上是不高的。网络教育与自考的统考…

《Java并发编程的艺术》之synchronized的底层实现原理

在学习锁优化时&#xff0c;对象头(Mark Word) 是必不可缺的一环&#xff0c;因为synchronized 用的锁是存在对象头里的。32位的虚拟机上对象头占64位&#xff08;8字节&#xff09;&#xff0c;64位的虚拟机上对象头占128位(16字节&#xff09;[^objectHead]&#xff1b;而不同…

[html] 你有使用过del标签吗?说说它的用途

[html] 你有使用过del标签吗&#xff1f;说说它的用途 这个del标签的话它的作用是在内容文本中间加一道横线 我之前有做过一个电商重构的页面 在标价部分 原价跟现价那块用过 因为促销 原价已经不起作用 所以需要用del标签包裹个人简介 我是歌谣&#xff0c;欢迎和大家一起交…

SQL 2005: @@identity 的妙用

insert into a values(aaaaa) print identity; //打印刚生成的主键值.**update a set cAAAAAAAAAAAA where b15print identity;转载于:https://www.cnblogs.com/MySpace/archive/2009/11/10/1599797.html

文字投影_店铺门口投影灯,引领店铺新潮流

在社会的进步下&#xff0c;现在人们物质生活越来越好&#xff0c;在原来消费的基础上也更加注重消费时店铺的装修、氛围。装修精致、环境优雅的店铺不仅更加容易吸引顾客&#xff0c;并且更加容易让顾客打卡发圈&#xff0c;无形中也帮自己做了一波宣传。上次我们出去游玩的时…

[html] 你有使用过ins标签吗?说说它的用途

[html] 你有使用过ins标签吗&#xff1f;说说它的用途 为标签中的内容加入下划线&#xff0c; ins标签是一个语义标签&#xff0c;用于标注其为插入文档信息 ins标签是html5中的新标签个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但…

rails table html,Ruby on Rails:如何将字符串呈现为HTML?

我有str "Hi"在我的erb视图中&#xff1a;当我真正想要的是Hi时&#xff0c;页面上将显示&#xff1a;Hi。 将字符串"解释"为HTML标记的红宝石方法是什么&#xff1f;编辑&#xff1a;这种情况str "hello"如果我认为HTML源代码是>&#xff0c…

实验5

一、 1 #ifndef MACHINEPETS_H2 #define MACHINEPETS_H3 #include<iostream>4 #include<string>5 using namespace std;6 class MachinePets7 {8 public:9 MachinePets(const string s) :nickname(s) {} 10 virtual string talk()0; 11 string getnick…

DZ NT!架构

http://www.cnblogs.com/aaa6818162/archive/2009/05/24/1488236.html转载于:https://www.cnblogs.com/chenbg2001/archive/2009/11/11/1601230.html

iec104点号_QTouch之IEC60870-104通讯

QTouch之IEC60870-104通讯作者&#xff1a;舜通智能 来源&#xff1a;www.sitcsys.com 发布时间&#xff1a;2020-04-06热度&#xff1a;0一、协议简介IEC60870-104规约是一个广泛应用于电力、城市轨道交通等行业的国际标准&#xff0c;由国际电工委员会制定。IEC104规约把IEC1…

计算机网络ieee,博士生程珂论文连续两年被计算机网络顶级会议IEEE INFOCOM录用...

近日&#xff0c;第39届IEEE国际计算机通信会议(IEEE International Conference on Computer Communications, IEEE INFOCOM 2020)录用结果揭晓&#xff0c;陕西省网络与系统安全重点实验室沈玉龙教授课题组博士生程珂的论文《A Lightweight Auction Framework for Spectrum Al…

SQLite数据库如何存储和读取二进制数据

1. 存储二进制数据SQLite提供的绑定二进制参数接口函数为:int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));我们希望使用的是一套经过封装的COM接口&#xff0c;将上面这个函数封装为COM接口的形式BindParaByIndex( LONG index, VARIANT…

[html] 你有使用过summary标签吗?说说它的用途

[html] 你有使用过summary标签吗&#xff1f;说说它的用途 没有用过这个标题&#xff0c;认真地查阅了一下。 发现summary标签和details标签是配套使用的&#xff0c;而且仅有Chrome和Safari 6浏览器支持。 summary标签是作为details标签里的标题&#xff0c;details标签用于描…

Git 仓库 清理 瘦身

第一步&#xff0c;找出大文件或误添加的文件 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk {print $1})" 第二步&#xff0c;从仓库中删除文件或文件夹 删文件&#xff0c;将 bigfile 换成上…

去除标题_资深运营导师-云中教你轻松写标题

一、标题作用解读标题对于产品的意义买家购买逻辑想到一款产品&#xff0c;并知道他的名称去网上搜索&#xff0c;看到图片等信息类比价格评价等内容&#xff0c;下单收到货和自己根据标题照片评判商品核心要点&#xff1a;买家是根据产品名字作为购买切入点&#xff1b;照片和…

电大计算机网考选择题多少分,2016年度电大计算机网考选择题及标准答案.doc

2016年度电大计算机网考选择题及标准答案^计算机网考选择题及答案1.微型计算机的性能指标不包括______。DA.字长 B.存取周期 C.主频 D.硬盘容量2.计算机硬件系统的主要组成部件有五大部分&#xff0c;下列各项中不属于五大部分的是______。BA.运算器 B.软件 C.I/O设备 D.控制器…

Oracle OCM 认证指南

OCM考试全称为Oracle Certified Master(Oracle认证大师)&#xff0c;是在OCA(Oracle认证专员Oracle Certified Associate)、OCP(Oracle认证专家Oracle Certified Professional)之后更高一级的Oracle技术认证&#xff0c;也是Oracle技术认证最高的一个级别。 考试是两天的时间&a…