sort函数用法简介
排序算法为竞赛中最常用的算法之一,我们可以利用 C++自带的库函数进行排序。
头文件&函数调用格式
使用排序算法必须包含 #include<algorithm> 头文件
自带排序算法的一般形式为:【排序区间,左闭右开,即取左不取右】
sort(arr+m,arr+n); //将数组 arr 的下标为 m 的元素到下标为 n-1 的元素进行从小到大排序。 sort(arr+m,arr+n,cmp); //与 sort(arr+m,arr+n)相比,这个写法可以自己定义排序的规则 //其中,cmp 为自定义的函数
如果对数组A下标为[1,12]的范围排序,调用的函数形式应该为:
sort(A+1,A+13); sort(A+1,A+13,cmp);
从小到大排序
sort函数如果不便用比较函数,默认从小到大排序。
例.从键盘读入 10 个数,然后从小到大输出的功能
#include<iostream> using namespace std; int a[10]; int main() { for (int i=0;i<10;++i) cin>>a[i]; sort(a+0,a+10); for (int i=0;i<10;++i) cout<<endl; return 0; }
从大到小排序 从大到小的进行排序。那么我们可以用 sort(arr+n,arr+m,cmp)进行排序。 不过,在调用 sort(arr+n,arr+m,cmp) 之前我们需要自己写个 cmp 函数。
//cmp 函数的名字compare的缩写 bool my_cmp(int x,int y) { return x>y; //默认比较函数体内容为:x<y }
例.程序实现从键盘读入 10 个数,然后从大到小输出的功能。
#include<iostream> using namespace std; int a[10]; bool cmp(int x,int y){ return x>y; //从大到小排列;默认是 x<y 为真 } int main() { for (int i=0;i<10;++i) cin>>a[i]; sort(a+0,a+10,cmp); for (int i=0;i<10;++i) cout<<endl; return 0; }
有多个排序规则
在更多情况下,我们不仅对一个特征进行排序,而是多个特征。
例如将学生的成绩进行排序,当然 用上面的做法是行不通的。 这时,我们就想到了结构体这种数据类型。
当我们采用 sort()函数的默认规则排 序结构体时,sort()默认结构体中的第一个成员为第一关键字,第二个成员为第二关键字,……,第 N 个元 素为第 N 关键字,然后从小到大排序。
例.我们要将学生的成绩从大到小排序,当成绩相同时,根据姓名字典序小的优先的规则排进行序。
显然我们无法采用默认规则进行排序。
这时我们可以定义这样的 cmp: 对结构体数组排序,比较函数传参时数据类型应当为结构体类型。
struct STU{ float score; char name[10]; }; bool StuCmp( STU a, STU b) { if (a.score!=b.score) return a.score>b.score; //成绩不相等时,比较成绩 else{//否则(隐含成绩相等)比较姓名字典序 if (strcmp(a.name,b.name)<0) return 1; //strcmp( )函数有三种结果,前面小时直接判断为真,不可以简写 return 0; //包含大于为正时,和相等为0时 } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性