java解法,主要用到Comparator接口

import java.util.*;
public class Main{
//先定义一个成绩表类
    class grade_list{
        public String name;
        public int grade;
        public grade_list(String name, int grade){
            super();
            this.name = name;
            this.grade = grade;
        }
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = Integer.parseInt(sc.nextLine());
            int tmp = Integer.parseInt(sc.nextLine());
            Set<String[]> str = new LinkedHashSet<>();//用链表保存输入的名字和分数因为同分时按输入的顺序排,所以用链表存储
            List<grade_list> list = new ArrayList<>();//列表保存成绩单对象
            for(int i=0; i<n; i++){
                str.add(sc.nextLine().split(" "));//录入成绩
            }
            for(String[] arr:str){
                String na = arr[0];
                int g = Integer.parseInt(arr[1]);
                list.add(new Main().new grade_list(na,g));
            }
            Collections.sort(list, new Comparator<grade_list>(){
                @Override
                public int compare(grade_list o1,grade_list o2){
                    if(tmp==0) return o2.grade - o1.grade;//当tmp=0时,分数按升序排
                    else return o1.grade - o2.grade;//当tmp=1时,分数按降序排
                }
            });
            for(grade_list person:list){//遍历打印
                System.out.println(person.name+ " "+person.grade);
            }

        }
    }
}