成绩排序(结构体排序)

成绩排序

题目描述
查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。

示例
jack 70
peter 96
Tom 70
smith 67

从高到低 成绩
peter 96
jack 70
Tom 70
smith 67

从低到高

smith 67

jack 70
Tom 70
peter 96

输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开

输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

示例1
输入
3
0
fang 90
yang 50
ning 70

输出
fang 90
ning 70
yang 50

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

int N;
int m,cnt;
struct grade {
	char A[50];
	int num;
	int loc;
} Node[100];


bool cmp1(grade a, grade b ) {//降序 
	if(a.num==b.num) return a.loc<b.loc;
	return a.num>b.num;
}

bool cmp2(grade a, grade b ) {
	if(a.num==b.num) return a.loc<b.loc;
	return a.num<b.num;
}

int main() {
	while(cin>>N>>m) {
		cnt=0;
		while(N--) {
			scanf("%s %d",Node[cnt].A,&Node[cnt].num);
			Node[cnt].loc=cnt;
			cnt++;
		}

		if(m==0) {
			sort(Node,Node+cnt,cmp1);
		} else {
			sort(Node,Node+cnt,cmp2);
		}
		for(int i=0; i<cnt; i++) {
			//cout<<Node[i].num<<endl;
			printf("%s %d\n",Node[i].A,Node[i].num);
		}

	}


	return 0;
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值