社区讨论

求助大佬们sort函数的详细用法

P1093[NOIP 2007 普及组] 奖学金参与者 5已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lo7n48si
此快照首次捕获于
2023/10/27 04:31
2 年前
此快照最后确认于
2023/10/27 04:31
2 年前
查看原帖
先抛出问题在阅读代码是我发现他的排序是从大到小的

sort函数里面在调用一个cmp函数,那么排序关系(从大到小,还是从小到大)与cmp是否有关系,又行该怎么区控制

代码是题解,我开始不会这个sort的用法,所以用了个快排(虽然没通过)

CPP
#include<bits/stdc++.h>
using namespace std;
struct stu{//学生信息
	int Id;
	int Chinese;
	int Math;
	int English;
	int Sum;
};stu a[301];
bool cmp(stu a,stu b)//上面已经解释过了
{
	if(a.Sum>b.Sum)
		return true;
	else if(a.Sum==b.Sum && a.Chinese>b.Chinese)
		return true;
	else if(a.Sum==b.Sum && a.Chinese==b.Chinese && a.Id<b.Id) 
		return true;
	else
		return false;
}
int main()
{
	int n,i;
	scanf("%d",&n);
	for(i=1;i<=n;i++)//数据处理
	{
		scanf("%d%d%d",&a[i].Chinese,&a[i].Math,&a[i].English);
		a[i].Sum=a[i].Chinese+a[i].Math+a[i].English;
		a[i].Id=i;
	}
	sort(a+1,a+n+1,cmp);//STL最棒的快排
	for(i=1;i<=5;i++)
		printf("%d %d\n",a[i].Id,a[i].Sum);
	return 0;
}
我不懂原理,所以原谅我猜测只要把cmp函数定义的参数a , b互换位置就可以做到从小到大排序了。

回复

5 条回复,欢迎继续交流。

正在加载回复...