题解 | #成绩排序#
成绩排序
http://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1
稳定排序用stable_sort,如果想不起来可以在结构体中多设置一个num表示先后。 法1:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct student{
string name;
int score;
};
int flag; //升序还是降序
bool cmp(student a,student b){
if(flag==0) return a.score>b.score;
else return a.score<b.score; //这里必须写else,否则牛客会编译失败
}
int main(){
int n;
while(cin>>n){
cin>>flag;
student stu[n];
for(int i=0;i<n;i++) cin>>stu[i].name>>stu[i].score;
stable_sort(&stu[0],&stu[n],cmp); //重点:sort是不稳定排序,stable_sort才是稳定排序
for(int i=0;i<n;i++) cout<<stu[i].name<<' '<<stu[i].score<<endl;
}
return 0;
}
法2:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct student{
string name;
int score;
int num;
};
int flag; //升序还是降序
bool cmp(student a,student b){
if(flag==0) {
if(a.score==b.score) return a.num<b.num;
else return a.score>b.score;
}
else {
if(a.score==b.score) return a.num<b.num;
else return a.score<b.score; //这里必须写else,否则牛客会编译失败
}
}
int main(){
int n;
while(cin>>n){
cin>>flag;
student stu[n];
for(int i=0;i<n;i++){
cin>>stu[i].name>>stu[i].score;
stu[i].num=i;
}
sort(&stu[0],&stu[n],cmp); //重点:sort是不稳定排序,stable_sort才是稳定排序
for(int i=0;i<n;i++) cout<<stu[i].name<<' '<<stu[i].score<<endl;
}
return 0;
}