金银铜牌排序【二维数组借用Arrays.sort方法进行排序】

1475: 金银铜奖牌排序

题目描述

奥运会开始了,想请你为各个国家和地区做奖牌排序,按照金牌>银牌>铜牌的格式进行排序

输入

第一行 告诉你共有n个国家

接来下的n 行 每行三个数字 分别代表 金牌数量 银牌数量 铜牌数量 中间用空格隔开

输出

输出n行 每行三个数字 按照题意进行排序

样例输入 复制
复制代码
5
1 2 3
2 3 4
1 4 6
1 4 3
0 3 4
样例输出 复制
复制代码
2 3 4
1 4 6
1 4 3
1 2 3
0 3 4

这道题其实就是利用了Arrays.sort方法,不过这里因为是对二维数组进行排序所以通过传入一个自定义的比较器(Comparator<int[]>),可以指定排序的方式。在这里,比较器通过重写compare方法来实现按每行的第一个元素进行降序排序(第二个参数在前面就是降序,第一个参数在前面就是升序)。

  • compare方法中的Integer.compare(o1[0], o2[0])用于比较两个数组o1和o2的第一个元素(即o1[0]和o2[0])。返回负数表示o1[0]小于o2[0],零表示相等,正数表示o1[0]大于o2[0]
  • 这样,当调用Arrays.sort(arr, comparator)时,数组arr将按照每行第一个元素的升序顺序进行排序。反之则是降序。
java 复制代码
package java基础.Test78;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[][] arr = new int[n][3];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 3; j++) {
                arr[i][j] = scanner.nextInt();
            }
        }
        Arrays.sort(arr, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0]!=o2[0]){
                    return Integer.compare(o2[0],o1[0]);
                }else if(o1[1]!=o2[1]){
                    return Integer.compare(o2[1],o1[1]);
                }else {
                    return Integer.compare(o2[2],o1[2]);
                }
            }
        });

        // 输出排序后的数组
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }


}
相关推荐
L_09072 小时前
【C++】高阶数据结构 -- 红黑树
数据结构·c++
划破黑暗的第一缕曙光6 小时前
[数据结构]:5.二叉树链式结构的实现1
数据结构
青桔柠薯片6 小时前
数据结构:单向链表,顺序栈和链式栈
数据结构·链表
XiaoFan0127 小时前
将有向工作流图转为结构树的实现
java·数据结构·决策树
睡一觉就好了。7 小时前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法
齐落山大勇7 小时前
数据结构——单链表
数据结构
皮皮哎哟8 小时前
深入浅出双向链表与Linux内核链表 附数组链表核心区别解析
c语言·数据结构·内核链表·双向链表·循环链表·数组和链表的区别
wWYy.8 小时前
指针与引用区别
数据结构
历程里程碑9 小时前
Linux 17 程序地址空间
linux·运维·服务器·开发语言·数据结构·笔记·排序算法
-dzk-9 小时前
【代码随想录】LC 203.移除链表元素
c语言·数据结构·c++·算法·链表