按对对多维数组排序

用户名

我正在尝试按对对多维数组进行排序。我知道我可以使用Comparator,但是我想用我的代码来实现。这是我到目前为止尝试过的:

 private static void sortArr(int[][] arr) {

    for (int i = 0; i < arr.length; i++) {

        int maxValColumnIndex0 = arr[i][0];
        int maxValColumnIndex1 = arr[i][1];
        int maxIndex = i;

        for (int column = i + 1; column < arr[i].length; column++) {
            if (maxValColumnIndex1 < arr[column][1]){
                maxValColumnIndex1 = arr[column][1];
                maxValColumnIndex0 = arr[column][0];
                maxIndex = column;
            }
            if (i != maxIndex){
                arr[maxIndex][0] = arr[i][0];
                arr[maxIndex][1] = arr[i][1];
                arr[i][0] = maxValColumnIndex0;
                arr[i][1] = maxValColumnIndex1;

            }
        }
    }

}

输入样例:

{{4, 2}, {1, 7}, {4, 5}, {1, 2}, {1, 1}, {4, 1}}

输出应类似于:

{{1, 1}, {1, 2}, {1, 7}, {4, 1}, {4, 2}, {4, 5}}

我已经得到了:

{{1, 7}, {4, 2}, {4, 5}, {1, 2}, {1, 1}, {4, 1}}`

如何按对排序该数组?

希杜·卢卡(Schidu Luca)

一种解决方案可能是按照pairs您所说的对它们进行排序这是修改后的冒泡排序,可以与您的示例一起使用:

 private static void sortArr(int[][] arr) {
    for (int i = 0; i < arr.length; i++) {
        for (int column = 0; column < arr.length - 1; column++) {
            if(arr[column][0] > arr[column + 1][0]) {
                swap(arr, column);
            } else if(arr[column][0] == arr[column + 1][0] && arr[column][1] > arr[column + 1][1]) {
                    swap(arr, column);
            }
        }
    }

}

private static void swap(int[][] arr, int column) {
    int[] temp = arr[column];
    arr[column] = arr[column + 1];
    arr[column + 1] = temp;
}

结果是您想要的: [[1, 1], [1, 2], [1, 7], [4, 1], [4, 2], [4, 5]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章