1. import java.util.*;
    2. /**
    3. * @author Raint
    4. * @date 2022年07月04日 21:49
    5. */
    6. class Student{
    7. private int grade;
    8. private String name;
    9. public static final Comparator<Student> INCREASE = new increase();
    10. public static final Comparator<Student> DECREASE = new decrease();
    11. public Student(String name, int grade) {
    12. this.name = name;
    13. this.grade = grade;
    14. }
    15. public String toString() {
    16. return name + " " + grade;
    17. }
    18. private static class increase implements Comparator<Student> {
    19. public int compare(Student v, Student w) {
    20. return w.grade - v.grade;
    21. }
    22. }
    23. private static class decrease implements Comparator<Student> {
    24. public int compare(Student v, Student w) {
    25. return v.grade - w.grade;
    26. }
    27. }
    28. }
    29. public class Main {
    30. /**
    31. 描述
    32. 给定一些同学的信息(名字,成绩)序列,请你将他们的信息按照成绩从高到低或从低到高的排列,相同成绩
    33. 都按先录入排列在前的规则处理。
    34. 例示:
    35. jack 70
    36. peter 96
    37. Tom 70
    38. smith 67
    39. 从高到低 成绩
    40. peter 96
    41. jack 70
    42. Tom 70
    43. smith 67
    44. 从低到高 成绩
    45. smith 67
    46. jack 70
    47. Tom 70
    48. peter 96
    49. 注:0代表从高到低,1代表从低到高
    50. 数据范围:人数:1\le n \le 200\1≤n≤200
    51. 进阶:时间复杂度:O(nlogn)\O(nlogn) ,空间复杂度:O(n)\O(n)
    52. 输入描述:
    53. 第一行输入要排序的人的个数n,第二行输入一个整数表示排序的方式,之后n行分别输入他们的名字和成绩,以一个空格隔开
    54. 输出描述:
    55. 按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
    56. 示例1
    57. 输入:
    58. 3
    59. 0
    60. fang 90
    61. yang 50
    62. ning 70
    63. 输出:
    64. fang 90
    65. ning 70
    66. yang 50
    67. 示例2
    68. 输入:
    69. 3
    70. 1
    71. fang 90
    72. yang 50
    73. ning 70
    74. 输出:
    75. yang 50
    76. ning 70
    77. fang 90
    78. */
    79. public static void main(String[] args) {
    80. Scanner scanner = new Scanner(System.in);
    81. while (scanner.hasNext()) {
    82. int n = scanner.nextInt();
    83. int flag = scanner.nextInt();
    84. Student[] students = new Student[n];
    85. for (int i = 0; i < n; i++) {
    86. students[i] = new Student(scanner.next(), scanner.nextInt());
    87. }
    88. // 根据flag正序或者逆序输出数组
    89. if (flag == 0) { // 正序
    90. Arrays.sort(students, Student.INCREASE);
    91. } else { // 逆序
    92. Arrays.sort(students, Student.DECREASE);
    93. }
    94. for (Student student : students) {
    95. System.out.println(student);
    96. }
    97. }
    98. }
    99. }