算法1
(sort()排序) $O(nlogn)$
用结构体数组,sort()第三个参数实现总和排序
时间复杂度
sort()排序 基于快排实现 所以时间复杂度你懂的
C++ 代码
#include<bits/stdc++.h>
using namespace std;
struct stu{
int y,s,w,t,k; // 语数外 t总分 k学号
};
bool cmp(stu a,stu b) //结构体排序依据
{
if(a.t==b.t) //总分相同情况下若语文相同则返回较小的学号 否则返回语文较大的
{
if(a.y==b.y) return a.k<b.k;
else return a.y>b.y;
}else{
return a.t>b.t; //按总分排序
}
}
int main()
{
int n;
cin>>n;
stu a[10001]; //实例化结构体数组
for(int i=1;i<=n;i++) //多次读入
{
cin>>a[i].y>>a[i].s>>a[i].w; //读入结构体中
a[i].k=i; //编号
a[i].t=a[i].y+a[i].s+a[i].w; //总分
}
sort(a+1,a+n+1,cmp); //sort排序
for(int i=1;i<=5;i++) cout<<a[i].k<<' '<<a[i].t<<endl; //输出前五
return 0;
}
结构体 多条件排序天下第一