考研机试 2.成绩排序

 时间:2021/02/21

 一.题目描述

查找和排序

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

示例:
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(升序)再分别输入他们的名字和成绩,以一个空格隔开。

输出描述

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

题目链接

 https://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1?tpId=40&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

二.算法

题解

该题有多个输入块,对于每个输入块,第一行都是要排序的人数,第二行是排序的方法,之后每行由姓名和成绩组成。所以每次读取输入时都以输入块为单位进行读取,输出时也以输出块为单位进行输出。这里我们分别用names数组和scores数组来存放输入块中姓名和成绩,用相同的下标作为映射关系,所以当我们对成绩进行排序的时候也要对姓名进行相同的排序,这样就可以保证二者之间的映射关系是正确的。

代码

import java.util.Scanner;

public class Main{
    
    public static void main(String[] args){
        
        Scanner in = new Scanner(System.in);
        
        while(in.hasNext()){
            int len = in.nextInt();
            int model = in.nextInt();
            String[] names = new String[len];
            int[] scores = new int[len];
            for(int i = 0; i < len; i++){
                names[i] = in.next();
                scores[i] = in.nextInt();
            }
        
            if(model == 0){
                sortDown(names, scores, len);
            }
            else{
                sortUp(names, scores, len);
            }
        
            for(int i = 0; i < len; i++){
                System.out.println(names[i] + " " + scores[i]);
            }
        }
    }
    
    public static void sortDown(String[] names, int[] scores, int len){
        
        int flag = 0;
        for(int i = 0; i < len - 1; i++){
            for(int j = len - 1; j > i; j--){
                if(scores[j] > scores[j-1]){
                    int temp1 = scores[j];
                    scores[j] = scores[j-1];
                    scores[j-1] = temp1;
                    String temp2 = names[j];
                    names[j] = names[j-1];
                    names[j-1] = temp2;
                    flag = 1;
                }
            }
            if(flag == 0){
                break;
            }
        }
    }
    
    public static void sortUp(String[] names, int[] scores, int len){
        
        int flag = 0;
        for(int i = 0; i < len - 1; i++){
            for(int j = len - 1; j > i; j--){
                if(scores[j] < scores[j-1]){
                    int temp1 = scores[j];
                    scores[j] = scores[j-1];
                    scores[j-1] = temp1;
                    String temp2 = names[j];
                    names[j] = names[j-1];
                    names[j-1] = temp2;
                    flag = 1;
                }
            }
            if(flag == 0){
                break;
            }
        }
    }
    
}
原文地址:https://www.cnblogs.com/machi12/p/14424312.html