排序行时,如何在多维数组中交换列?

时间:2017-04-02 20:30:30

标签: java sorting multidimensional-array

我有一个数组[x] [y]

4 2 0 3 1 
t o b e o 
r n o t t 
o b e x x 

我如何只对for行进行排序,但是使用行移动列。 结果必须是

0 1 2 3 4
b o o e t
o t n t r
e x b x o

我试过

for (char[] innerArray : grid) {
    Arrays.sort(innerArray);
}

但它会对所有行进行排序。

1 个答案:

答案 0 :(得分:2)

以下是您的问题的解决方案。这个算法可以完全按照你上面提到的那样做。

Integer[][] arr = new Integer[4][4];
        arr[0][0] = 4;
        arr[0][1] = 3;
        arr[0][2] = 1;
        arr[0][3] = 2;

        arr[1][0] = 6;
        arr[1][1] = 4;
        arr[1][2] = 9;
        arr[1][3] = 2;

        arr[2][0] = 9;
        arr[2][1] = 7;
        arr[2][2] = 5;
        arr[2][3] = 4;

        arr[3][0] = 11;
        arr[3][1] = 33;
        arr[3][2] = 6;
        arr[3][3] = 8;

for (int i = 0; i < arr[0].length; i++) {
    for (int j = i+1; j < arr[0].length; j++) { 
        if (arr[0][i] > arr[0][j]) {    
            for (int k = 0; k < arr.length; k++) {
                int temp = arr[k][i];
                arr[k][i] = arr[k][j];
                arr[k][j] = temp;
            }
        }
    }
 }
  

打印出阵列以进行测试。

for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[0].length; j++) {
        if (arr[i][j] > 9) {
            System.out.print(arr[i][j]+"  ");
        }else{
            System.out.print(arr[i][j]+"   ");
        }
    }
    System.out.println();
}
  

这是上述例子。

排序前

4   3   1   2   
6   4   9   2   
9   7   5   4   
11  33  6   8

排序后

1   2   3   4   
9   2   4   6   
5   4   7   9   
6   8   33  11

我希望这个解决方案符合您的要求。