【问题标题】:Sort 2D array rows [duplicate]对二维数组行进行排序[重复]
【发布时间】:2018-04-20 12:55:24
【问题描述】:

我有一个二维数组,我只需要对它的行进行排序,我已经完成了这段代码:

double[][] arr = initArray();

    for (int row = 0; row < arr.length; row++) {
        int index = row;
        double minVal = arr[row][0];
        for (int column = 0; column < arr[row].length; column++) {

            if (arr[row][column] < minVal) {
                minVal = arr[row][column];
                index = column;
            }

        }


        arr[row][index] = arr[row][0];
        arr[row][0] = minVal;

    }

示例输入:

{{0.15, 0.875, 0.375},
 {0.55, 0.005, 0.225},
 {0.30, 0.12, 0.4}}

期待输出:

0.15 0.375 0.875 
0.005 0.225 0.55 
0.12 0.3 0.4

我得到了什么:

0.15 0.875 0.375 
0.005 0.55 0.225 
0.12 0.3 0.4

【问题讨论】:

  • 二维数组是数组{ {...}, {...}, {...} }。您当前的代码不对内部数组进行排序,而是在每一行中搜索最小值并将其移动到该行的开头。尝试想办法对一维数组进行排序,然后将其应用于每一行。
  • @Pshemo 感谢您的指点。
  • @jontro 感谢您指出这一点,但这不是重复,我说的是rows

标签: java arrays


【解决方案1】:

您可以使用 Arrays.sort(); java.util.Arrays 类中的函数对二维数组中的每一行进行排序。

 for (double[] innerArray: outerArray) {
     Arrays.sort(innerArray);
 }

编辑:这是整个示例:

double[][] outerArray = {
     {
         0.15,
         0.875,
         0.375
     },
     {
         0.55,
         0.005,
         0.225
     },
     {
         0.30,
         0.12,
         0.4
     }
 };


 for (double[] innerArray: outerArray) {
     Arrays.sort(innerArray);
 }


 for (int i = 0; i < outerArray.length; i++) {

     for (int j = 0; j < outerArray.length; j++) {

         System.out.print(outerArray[i][j] + " ");

     }
     System.out.println();

 }

【讨论】:

  • 不幸的是,这行不通,我只需要行。
  • 好的。我发布了整个代码,请查看,您将自己看到结果。
  • 是的,谢谢。
【解决方案2】:
        for (int column = 0; column < arr[row].length; column++) {
        //**insert another for loop here**
            if (arr[row][column] < minVal) {
              minVal = arr[row][column];
              index = column;
            }

        }

您的代码每行运行一次,因此它只找到最小的并转移到第一个位置。您只需要确保同一操作发生的次数与行中的项目相同。看这里参考Bubble Sort

【讨论】:

    【解决方案3】:

    正如@Pshemo 所提到的,您没有了解所有的价值观,这是一种可能的方式:

     for (int row = 0; row < arr.length; row++) {
            for (int column = 0; column < arr.length - 1; column++) {
                double min = arr[row][column];
                int index = column;
                for (int j = column + 1; j < arr.length; j++) {
                    if (min > arr[row][j]) {
                        min = arr[row][j];
                        index = j;
                    }
                }
                if (index != column) {
                    arr[row][index] = arr[row][column];
                    arr[row][column] = min;
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 2019-01-08
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      相关资源
      最近更新 更多