如何基于第3列对多维双数组进行排序

时间:2015-03-30 12:44:25

标签: java comparator

我有一个多维数组points[10][3],我需要根据第3列对此进行排序。我该怎么做?还有其他答案,但我发现它们太高级了,有人可以解释一下,就像你会向5岁的人解释一样吗?

2 个答案:

答案 0 :(得分:1)

查看本教程:https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html,尤其是“比较器”部分。

您要排序的数据结构是一个二维数组,也可以看作一个数组数组(一个数组作为元素):

// array containing 10 int[3]-arrays:
int[][] points = new int[10][3];

如果你想对'外部'进行排序。数组,你的排序算法需要比较这个数组的元素,所以它必须处理int[3]项,我们想要用它们的最后一个元素(index = 2)来比较它们。

Java 7(及以下)

我们可以实现Comparator,它能够通过第3个元素比较int数组:

Comparator<int[]> comparator = new Comparator<int[]> {
    public int compare(int[] a1, int[] a2) {
        return Integer.compare(a1[2], a2[2]);
    }
}

现在,每当我们想要对这样的二维数组进行排序时,我们就可以使用这个比较器:

Arrays.sort(points, comparator);

Java 8

从Java 8开始,它甚至更简单,您甚至不需要实现Comparator。只需使用lambda表达式来定义比较策略:

Arrays.sort(points, Comparator.comparingInt(a -> a[2]));

答案 1 :(得分:0)

你只想使用一些逻辑思维。将它假设为一维数组并对其进行处理。

//array with some temp values
        int points[][]={{5,5,16},{5,4,9},{6,7,10},{1,4,5},{1,5,2},{1,2,3},{2,1,10},{2,1,3},{5,5,2},{5,5,1}};

        //Just printing my array
        System.out.println("My Array :");
        for(int i=0;i<10;i++)
            System.out.println("{"+points[i][0]+","+points[i][1]+","+points[i][2]+"}");

        //using bubble sort
        for(int i=0;i<10;i++){
            for(int j=i+1;j<10;j++){
                //only checking the 3rd column
                if(points[i][2]>points[j][2])
                    swap(points[i],points[j]);
            }
        }

        System.out.println("After sorting :");
        for(int i=0;i<10;i++)
            System.out.println("{"+points[i][0]+","+points[i][1]+","+points[i][2]+"}");

I got the below output,

My Array :
{5,5,16}
{5,4,9}
{6,7,10}
{1,4,5}
{1,5,2}
{1,2,3}
{2,1,10}
{2,1,3}
{5,5,2}
{5,5,1}
After sorting :
{5,5,1}
{5,5,2}
{1,5,2}
{1,2,3}
{2,1,3}
{1,4,5}
{5,4,9}
{2,1,10}
{6,7,10}
{5,5,16}