列表

详情


HJ68. 成绩排序

描述

给定一些同学的信息(名字,成绩)序列,请你将他们的信息按照成绩从高到低或从低到高的排列,相同成绩

都按先录入排列在前的规则处理。

例示:
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代表从低到高

数据范围:人数:
进阶:时间复杂度:,空间复杂度:

输入描述

第一行输入要排序的人的个数n,第二行输入一个整数表示排序的方式,之后n行分别输入他们的名字和成绩,以一个空格隔开

输出描述

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

示例1

输入:

3
0
fang 90
yang 50
ning 70

输出:

fang 90
ning 70
yang 50

示例2

输入:

3
1
fang 90
yang 50
ning 70

输出:

yang 50
ning 70
fang 90

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2020-11-05

#include <stdio.h>
#include <string.h>

typedef struct
{
    char name[50];
}test;

int main()
{
    int n,jud;
    while(scanf("%d",&n)!=EOF)
    {
        scanf("%d",&jud);
        int i,j,max=0,min=0,flag[n],orig[n];
        test inp[n];
        memset(flag,0,sizeof(flag));
        for(i=0;i<n;i++)
            scanf("%s %d",&inp[i].name,&orig[i]);
        if(jud==0)
        {
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                    if(orig[j]>orig[max] && flag[j]==0)
                        max=j;
                flag[max]=1;
                printf("%s %d\n",inp[max].name,orig[max]);
                for(int k=0;k<n;k++)
                    if(flag[k]==0)
                    {max=k;break;}
            }
        }
        else
        {
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                    if(orig[j]<orig[max] && flag[j]==0)
                        max=j;
                flag[max]=1;
                printf("%s %d\n",inp[max].name,orig[max]);
                for(int k=0;k<n;k++)
                    if(flag[k]==0)
                    {max=k;break;}
            }
        }
    }
    return 0;
}

C++14 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2020-09-23

#include <stdio.h>
#include <string.h>

struct stu {
    char name[20];
    int grade;
};

int main(){
    int n, flag;
    while(scanf("%d %d", &n, &flag) != EOF){
        stu a[n];
        for(int i = 0; i<n; i++){
            scanf("%s",&a[i].name);
            scanf("%d",&a[i].grade);
        }
        stu temp;
        if(flag){
            for(int i=0; i<n; i++){
                for(int j=0;j<n-i-1;j++){
                    if(a[j].grade > a[j+1].grade){
                        temp=a[j+1];
                        a[j+1]=a[j];
                        a[j]=temp;
                    }
                }
            }
        }else{
            for(int i=0; i<n; i++){
                for(int j=0; j<n-i-1; j++){
                    if(a[j].grade < a[j+1].grade){
                        temp=a[j+1];
                        a[j+1]=a[j];
                        a[j]=temp;
                    }
                }
            }
        }
        for(int i = 0; i<n; i++){
            printf("%s %d\n",a[i].name, a[i].grade);
        }
    }
}

上一题