排序问题题解大合集
算法1
我们用结构体来进行排序
我们的结构是这样的:
成绩
工号
名字
所以我们就可以得出一下代码
bool cmp(node a,node b){
if(a.x!=b.x)return a.x<b.x;
if(a.id!=b.id)return a.id<b.id;
return a.name<b.name;
}
- 只要成绩没重复,我们就排序
- 如果条件一重复了,我们就看只要工号没重复,我们就排序
- 如果条件一和条件二都重复了,我们就拿名字字典序排序
我们还要考虑一项,如果n<3
所以我们输出的时候要有所改变:
for(int i=1;i<=min(3,n);i++){
cout<<a[i].id<<' '<<a[i].name<<' '<<a[i].x<<'\n';
}
参考文献
C++ 代码
#include<bits/stdc++.h>
using namespace std;
struct node{
int id,x;
string name;
}a[10001];
bool cmp(node a,node b){
if(a.x!=b.x)return a.x<b.x;
if(a.id!=b.id)return a.id<b.id;
return a.name<b.name;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i].id>>a[i].name>>a[i].x;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=min(3,n);i++){
cout<<a[i].id<<' '<<a[i].name<<' '<<a[i].x<<'\n';
}
}