题解 | #成绩排序#

成绩排序

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;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 19:05
点赞 评论 收藏
分享
18 收藏 评论
分享
牛客网
牛客企业服务