如何对二维整数数组按列排序?Java实现遇阻寻求解决方案
按列垂直排序二维数组的解决方案
看起来你想要实现的是对二维数组的每一列单独进行升序排序,然后将排序后的列重新组合成新数组——你的示例把需求展示得非常清楚:
原数组:
6 | 8 | 9 | 16
0 | 6 | -3 | 4
18 | 2 | 1 | 11期望排序结果:
0 | 2 | -3 | 4
6 | 6 | 1 | 11
18 | 8 | 9 | 16
你的代码卡壳在不知道怎么按列处理,其实核心思路很简单:先把每一列的元素单独提取出来排序,再把排序后的元素放回原列的位置。下面是具体的实现步骤和代码:
实现思路
- 先确定数组的行数和列数(不管是方阵还是非方阵都适用,比如你的示例是3行4列,而你代码里写的10x10数组逻辑完全一致)
- 遍历每一列:
- 把当前列的所有元素提取到一个临时一维数组里
- 对这个临时数组进行升序排序
- 将排序后的元素依次放回原数组的对应列中
完整可运行代码
import java.util.Arrays; public class ColumnSortExample { public static void main(String[] args) { // 用你给出的示例数组初始化(如果是10x10的数组,只需要替换这里的初始化即可) int[][] array = { {6, 8, 9, 16}, {0, 6, -3, 4}, {18, 2, 1, 11} }; int rows = array.length; int cols = array[0].length; // 遍历每一列进行排序 for (int colIndex = 0; colIndex < cols; colIndex++) { // 提取当前列的所有元素 int[] currentColumn = new int[rows]; for (int rowIndex = 0; rowIndex < rows; rowIndex++) { currentColumn[rowIndex] = array[rowIndex][colIndex]; } // 对列元素进行升序排序 Arrays.sort(currentColumn); // 将排序后的元素放回原数组的对应列 for (int rowIndex = 0; rowIndex < rows; rowIndex++) { array[rowIndex][colIndex] = currentColumn[rowIndex]; } } // 打印排序后的数组验证结果 for (int[] row : array) { for (int i = 0; i < row.length; i++) { System.out.print(row[i]); if (i != row.length - 1) { System.out.print(" | "); } } System.out.println(); } } }
代码细节说明
- 外层循环
colIndex控制我们处理哪一列,内层第一个循环负责把当前列的所有元素捞出来放到临时数组里 - Java自带的
Arrays.sort()方法默认是升序排序,正好满足你的需求 - 最后一个循环把排序好的元素放回原列,这样每一列就都完成了垂直排序
- 如果你用的是10x10的数组,只需要替换初始化部分的数组内容,整个逻辑不需要改动
额外扩展:降序排序
如果之后需要对列进行降序排序,只需要对临时数组做一点调整,比如把int数组转成Integer数组后用自定义比较器:
import java.util.Arrays; import java.util.Collections; // 在列处理部分替换排序逻辑 Integer[] columnAsInteger = Arrays.stream(currentColumn).boxed().toArray(Integer[]::new); Arrays.sort(columnAsInteger, Collections.reverseOrder()); // 转回int数组放回原列 for (int rowIndex = 0; rowIndex < rows; rowIndex++) { array[rowIndex][colIndex] = columnAsInteger[rowIndex]; }
内容的提问来源于stack exchange,提问作者RageMasterGaming
相关产品推荐
相关产品推荐

