对nxn矩阵进行排序(2D阵列)

geo*_*geo 3 java arrays sorting matrix

在编程测试期间,我被要求编写一个Java程序来对3x3矩阵进行排序.即我给了一个矩阵(比如2D阵列m[3][3])

2 6 1
3 5 7 
4 8 9
Run Code Online (Sandbox Code Playgroud)

我被要求对这个矩阵进行排序,该矩阵应该给出一个输出矩阵

1 2 3  
4 5 6 
7 8 9 
Run Code Online (Sandbox Code Playgroud)

我做的是将这个3x3矩阵转换为1D阵列

a[9] = {2,6,1,3,5,7,4,8,9}
Run Code Online (Sandbox Code Playgroud)

并在此数组上执行冒泡排序,并将结果数组转换回2D数组.

我对这种方法不满意,因为我觉得这种做法非常俗气.有一个更好的方法吗.

编辑:我想删除数组转换部分.可以使用任何排序算法,并且希望对矩阵(2D阵列)本身执行排序.

Tag*_*eev 6

根据您的奇怪要求,您可以创建由输入矩阵支持的视图列表,并使用标准对其进行排序Collections.sort:

public static void sortMatrix(final int[][] matrix) {
    // Assuming the matrix is rectangular
    final int n = matrix.length;
    final int m = matrix[0].length;

    List<Integer> list = new AbstractList<Integer>() {
        @Override
        public Integer set(int index, Integer element) {
            return matrix[index/m][index%m] = element;
        }

        @Override
        public Integer get(int index) {
            return matrix[index/m][index%m];
        }

        @Override
        public int size() {
            return n*m;
        }
    };
    Collections.sort(list);
}
Run Code Online (Sandbox Code Playgroud)

在这里,我们只是定义我们自己getset方法,它改变了相应的矩阵元素.用法示例:

int[][] matrix = {{2,6,1},{3,5,7},{4,8,9}};
sortMatrix(matrix);
System.out.println(Arrays.deepToString(matrix));
Run Code Online (Sandbox Code Playgroud)

输出:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)

  • AbstractList的智能使用和实现.享受吧.但是我更喜欢算法的纯实现. (2认同)