整个2D阵列排序

时间:2013-01-23 15:04:44

标签: java arrays sorting multidimensional-array

我有一个2D数组,可以使用Java进行整体排序。

我看过各种链接 How to sort a two-dimension ArrayList使用比较器。

但它总是对特定元素进行排序。我希望能够为整个2d数组排序。 例如,

int[][] r = {{1,7,5},{1,3,5},{1,3,6}, {2,3,1}};

关于排序应该给我

{1,2,3},{1,3,5},{1,3,6},{1,5,7}.

谢谢!

3 个答案:

答案 0 :(得分:3)

您需要的是一个自定义比较器,它允许根据您的标准比较两个整数列表。

在使用此比较器排序之前,必须首先对列表进行排序。

答案 1 :(得分:3)

这就是我在Java中的表现:

private static void sortArray(int[][] array) {
    // Perform initial sorting
    for (int[] subArray : array) {
        Arrays.sort(subArray);
    }

    // Sort each array by its contents (similar to string sorting)
    Arrays.sort(array, new Comparator<int[]>() {
        @Override
        public int compare(int[] o1, int[] o2) {
            int length = Math.min(o1.length, o2.length);
            for (int i = 0; i < length; i++) {
                if (o1[i] > o2[i]) return 1;
                if (o1[i] < o2[i]) return -1;
            }

            // Longer arrays come after shorter arrays, but only if the rest is equal
            if (o1.length > o2.length) return 1;
            if (o1.length < o2.length) return -1;

            return 0;
        }
    });
}

第一步对2D数组中的所有数组进行排序,然后根据2D数组中每个数组的内容对整个数组进行排序。比较器的工作方式类似于区分大小写的字符串比较器。

答案 2 :(得分:2)

这将满足您的需求:

Arrays.sort(array, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        Arrays.sort(o1);
        Arrays.sort(o2);
        for (int i = 0; i < o1.length && i < o2.length; i++) {
            if (o1[i] != o2[i]) {
                return o1[i] < o2[i] ? -1 : 1;
            }
        }
        if (o1.length != o2.length) {
            return o1.length < o2.length ? -1 : 1;
        }
        return 0;
    }
});