每日一题 KY2 成绩排序2

描述

查找和排序

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

示例:
jack      70
peter     96
Tom       70
smith     67

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

从低到高

smith     67

jack      70
Tom      70
peter     96

输入描述:

注意一个case里面有多组样例,请用循环处理输入 输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。

输出描述:

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

示例1

输入:

3
0
fang 90
yang 50
ning 70

复制输出:

fang 90
ning 70
yang 50

复制

示例2

输入:

3
1
fang 90
yang 50
ning 70
3
0
moolgouua 43
aebjag 87
b 67

复制输出:

yang 50
ning 70
fang 90
aebjag 87
b 67
moolgouua 43

复制说明:

第一组用例:
3
1
fang 90
yang 50
ning 70
升序排序为:
yang 50
ning 70
fang 90
第二组降序为:
aebjag 87
b 67
moolgouua 43  
#include <iostream>
#include <algorithm>

using namespace std;
//方一:加序号模拟模拟稳定排序
//方二:用stable_sort
typedef struct Student{
    char name[50];
    int grade;
    int seq;//记录录入的顺序 sort是快排不稳定的排序

}student;

bool comp0(Student lhs,Student rhs){
    //降序 不发生交换
    if(lhs.grade>rhs.grade){
        return true;
    }
    else if(lhs.grade==rhs.grade && lhs.seq<rhs.seq){
        return true;
    }
    else{
        return false;
    }
}
bool comp1(Student lhs,Student rhs){
    //升序 不发生交换
    if(lhs.grade<rhs.grade){
        return true;
    }
    else if(lhs.grade==rhs.grade && lhs.seq<rhs.seq){
        return true;
    }
    else{
        return false;
    }
}


int main() {
    int n;
    int order;
    student arr[100];
    while (scanf("%d%d",&n,&order)!=EOF){
        int seq=0;
        for(int i=0;i<n;i++){
            scanf("%s%d",arr[i].name,&arr[i].grade);
            arr[i].seq=seq;
            seq++;
        }
        if(order==0){
            sort(arr,arr+n,comp0);
        }
        else{
            sort(arr,arr+n,comp1);
        }
        for(int i=0;i<n;i++) {
            printf("%s %d\n",arr[i].name,arr[i].grade);
        }

    }
    return 0;
}
/*
4
0
fang 100
li 90
zhong 70
zhou 100*/
/*
typedef struct Student{
    char name[50];
    int grade;


}student;

bool comp0(Student lhs,Student rhs){
    //降序 不发生交换
    if(lhs.grade>rhs.grade){
        return true;
    }

    else{
        return false;
    }
}
bool comp1(Student lhs,Student rhs){
    //升序 不发生交换
    if(lhs.grade<rhs.grade){
        return true;
    }

    else{
        return false;
    }
}


int main() {
    int n;
    int order;
    student arr[100];
    while (scanf("%d%d",&n,&order)!=EOF){

        for(int i=0;i<n;i++){
            scanf("%s%d",arr[i].name,&arr[i].grade);

        }
        if(order==0){
            stable_sort(arr,arr+n,comp0);
        }
        else{
            stable_sort(arr,arr+n,comp1);
        }
        for(int i=0;i<n;i++) {
            printf("%s %d\n",arr[i].name,arr[i].grade);
        }

    }
    return 0;
}*/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值