对2D数组行进行排序

时间:2017-11-08 00:14:46

标签: java arrays

我有2D数组,我只需要对它进行排序,我已完成此代码:

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

3 个答案:

答案 0 :(得分:1)

您可以使用Arrays.sort();函数来自java.util.Arrays类,用于对2d数组中的每一行进行排序。

 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();

 }

答案 1 :(得分:0)

正如@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;
            }
        }
    }

答案 2 :(得分:0)

        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