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阵列)本身执行排序.
根据您的奇怪要求,您可以创建由输入矩阵支持的视图列表,并使用标准对其进行排序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)
在这里,我们只是定义我们自己get和set方法,它改变了相应的矩阵元素.用法示例:
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)