使用3列对2d数组进行排序

时间:2015-04-07 05:31:09

标签: java arrays sorting compare

按列排序数组就像我想在这里做的那样是在我的最后一行上对我的值进行排序,并且根据排序,其他列上的数字也可能在同一行中发生变化

例如

int[][] array= { {1, 5, 3},{2, 6, 4},{12, 10, 1},{30, 75, 1} };

,输出应为

{12, 10, 1} {30, 75, 1} {1, 5, 3} {2, 6, 4}

`System.out.println(" Entre la cantidad de procesos que quiere correr:");                     int pros = scan.nextInt();

                int[][] myArr = new int[pros][3];

                for(int i=0; i< pros; i++){


                    System.out.println("CPU Burst proceso "+count+" :");
                     time2=scan.nextInt();

                     System.out.println("Arrival Time proceso "+count+" :"); 
                      arrt=scan.nextInt();


                      myArr[i][0]=count;
                      myArr[i][1]=time2;
                      myArr[i][2]=arrt;


                count++;
                }


                Arrays.sort(myArr, new Comparator<int[]>() {
                    public int compare(int[] o1, int[] o2) {
                        return Integer.compare(o2[2], o1[2]);
                    }
                });



                System.out.println(Arrays.deepToString(myArr)); `

2 个答案:

答案 0 :(得分:1)

您可以使用自定义Comparator来按第三个元素比较数组。

我们可以使用以下比较器:

(a1, a2) -> Integer.compare(a1[2], a2[2])

它接受两个数组作为参数,并在其第三个元素上返回Integer.compare()的结果。

例如:

int[][] array = {{1, 5, 3}, {2, 6, 4}, {12, 10, 1}, {30, 75, 1}};
Arrays.sort(array, (a1, a2) -> Integer.compare(a1[2], a2[2]));
System.out.println(Arrays.deepToString(array));

输出:

[[12, 10, 1], [30, 75, 1], [1, 5, 3], [2, 6, 4]]

答案 1 :(得分:-1)

让我们构造一个辅助数组,其长度与array.length相同:

int[] thirdColumnValues = new int[array.length];

然后我们可以复制第三列的值:

for(int i = 0; i < array.length; i++) {
  thirdColumnValues[i] = array[i][2];
}

然后我们可以对这个辅助数组进行排序:

Arrays.sort(thirdColumnValues);

然后我们可以将排序后的值存储回原始数组中:

for(int i = 0; i < array.length; i++) {
  array[i][2] = thirdColumnValues[i];
}