You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对二维数组指定列排序?附现有代码及尝试方案

二维数组指定列排序的正确实现方法

问题分析

你尝试按指定列对二维数组的行排序,但现有排序代码存在以下问题:

  • 变量名错误:代码中使用了未定义的mas,实际应该操作数组arr
  • 外层循环范围错误:外层循环应该遍历数组的行(arr.length),而非列数column
  • 打印时机错误:排序过程中就打印,应该在排序完成后统一输出结果

正确实现代码

public class Sort2DArrayByColumn {
    public static void main(String[] args) {
        int column = 10,
            row = 10,
            targetColumn = 1, // 重命名变量,避免和随机数的min混淆
            min = 1,
            max = 9;

        // 初始化并填充二维数组
        int[][] arr = new int[row][column];
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = (int)(Math.random() * (max - min) + min);
                System.out.printf("%2d", arr[i][j]);
            }
            System.out.println(); // 每行结束换行,提升可读性
        }
        System.out.println("========== 排序前 ==========");
        System.out.println("指定列(索引" + targetColumn + ")的值:");
        for (int k = 0; k < arr.length; k++) {
            System.out.print(arr[k][targetColumn] + " ");
        }
        System.out.println("\n========== 开始排序 ==========");

        // 冒泡排序:按指定列的值对行进行升序排序
        for (int k = 0; k < arr.length - 1; k++) {
            for (int j = k + 1; j < arr.length; j++) {
                if (arr[k][targetColumn] > arr[j][targetColumn]) {
                    // 交换整行
                    int[] temp = arr[k];
                    arr[k] = arr[j];
                    arr[j] = temp;
                }
            }
        }

        // 打印排序后的结果
        System.out.println("排序后的数组:");
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.printf("%2d", arr[i][j]);
            }
            System.out.println();
        }
        System.out.println("========== 排序后 ==========");
        System.out.println("指定列(索引" + targetColumn + ")的值:");
        for (int k = 0; k < arr.length; k++) {
            System.out.print(arr[k][targetColumn] + " ");
        }
    }
}

关键修正点说明

  • 变量语义优化:把原min改为targetColumn,避免和随机数范围的min混淆,代码可读性更强
  • 修复变量错误:将mas[k]替换为arr[k],确保操作的是目标数组
  • 调整循环范围:外层循环遍历数组的行(arr.length - 1,冒泡排序最后一行无需再比较),而非列数
  • 优化输出逻辑:排序完成后统一打印结果,同时添加分隔线和标注,方便对比排序前后的变化

更简洁的实现方式(可选)

如果不想手动实现冒泡排序,可使用Arrays.sort结合自定义比较器,代码更简洁且效率更高:

import java.util.Arrays;

// 替换手动冒泡排序的代码块
Arrays.sort(arr, (row1, row2) -> Integer.compare(row1[targetColumn], row2[targetColumn]));

这段代码会直接对二维数组的行按指定列的值进行升序排序,底层采用双轴快速排序,性能优于手动冒泡排序。

内容的提问来源于stack exchange,提问作者Glazzko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 20:01:02