先抛出问题在阅读代码是我发现他的排序是从大到小的
sort函数里面在调用一个cmp函数,那么排序关系(从大到小,还是从小到大)与cmp是否有关系,又行该怎么区控制
代码是题解,我开始不会这个sort的用法,所以用了个快排(虽然没通过)
#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);
for(i=1;i<=5;i++)
printf("%d %d\n",a[i].Id,a[i].Sum);
return 0;
}
我不懂原理,所以原谅我猜测只要把cmp函数定义的参数a , b互换位置就可以做到从小到大排序了。