按对排序多维数组

时间:2017-11-03 14:33:57

标签: java arrays sorting

我试图通过成对排序多维数组。我知道我可以使用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}}`

如何按对数组进行排序?

1 个答案:

答案 0 :(得分:0)

解决方案可能是按照您的说法将它们排序为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]]