使用sort函数进行排序 以及cmp函数定义排序规则

学习资料:《算法笔记》

sort()函数:

需要algorithm头文件。
sort(first, last, cmp):

  1. first是要排序区间首地址
  2. last是区间尾地址的下一地址
  3. cmp排序规则,默认升序

也就是说,排序的区间是[a,b)。例如,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了。

数组t的第0到len-1的元素排序:sort(t, t+len);
向量v排序:sort(v.begin(), v.end());

排序的数据类型不局限于整数,只要是定义了<运算的类型都可以,比如字符串类string,默认按照其字典序。

如果是没有定义<运算的数据类型,或者想改变排序的顺序,就要用到第三参数——比较函数cmp。


cmp函数:

比较函数cmp是一个自己定义的函数,返回值是bool型,它规定了什么样的关系才是“小于”。

我是这么记的:升序return的时候是小于号,降序则是大于号。

如果想把整数数组按降序排列,可以先定义一个比较函数cmp:

bool cmp(int a, int b){
	return a > b;
}
……
sort(a, a+100, cmp);

再看一个复杂一点的例子:

对结构体数组排序:

对于结构体数组arr[100],先按a值升序排列,如果a值相同,再按b值降序排列,如果b还相同,就按c降序排列

struct node{
 int a, b, c;
}arr[100];

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;
} 
……
sort(arr, a+100, cmp);

排名的实现:

有些排序题在排序之后需要给出每个个体的排名,常见的排名规则是:(以分数为例)

分数不同排名不同,分数相同排名相同但占用一个位置。

例如有3个人的成绩是95、95、92,那么这3个人的排名分别是1、1、3。

需要实现排名的要求时,一般需要在结构体定义时把排名定义好,然后一个个赋值(此时已经完成排序):

做法:

将数组第一个个体(以数组下标从0开始为例)的排名记为1,然后遍历剩余个体,如果当前个体的分数等于上一个个体,那么排名与上一个个体相同;否则当前个体的排名等于数组下标+1。

//排序完之后 
stu[0].r = 1;
for(int i = 1; i < n; i ++ ){
	if(stu[i].score = stu[i-1].score) 
		stu[i].r = stu[i-1].r;
	else stu[i].r = i+1;
}

相关题目:

PAT1025 PAT Ranking

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值