如何使用Arrays.sort按列对3乘3的数组进行排序?

时间:2015-11-19 17:48:17

标签: java arrays sorting

所以我允许用户输入一个3乘3的数组然后代码应该接受数组并按列对整数进行排序。如:
[15,87,37,
 55,5,22,
 30,12,40]

变成了 [15,5,22,
 30,12,37,
 55,87,40]

这是我的方法似乎不适用于列。它是按行排序?

my_app.exe

我对编码不是很熟悉所以我不会100%理解我看到有些人使用的比较器,而不是.sort。如果有人能够帮助我解决这个问题会很好。谢谢。

5 个答案:

答案 0 :(得分:1)

如何先移植它,然后对组件数组进行排序然后转置回来?

答案 1 :(得分:1)

基本上你要做的是用每个其他数组的相同索引对每个数组进行排序,这不是简单内置于Java的内容。您必须转置数组。该解决方案允许您在矩阵上运行时可能需要的未来操作。基本上,这意味着:

[row][column] => [column][row] 

在此表单中,可以按照您希望的方式逐个对数组进行排序,然后将其转换回原始表单以提供预期结果。

您需要为此编写代码。或者,您可以查找已经进行转置的库。有许多矩阵库,例如JAMA

答案 2 :(得分:0)

为什么不创建一个临时数组来将列转换为行,然后对单个行进行排序并将已排序的行设置回原始数组。

像:

min-width:0

答案 3 :(得分:0)

假设用户总是输入3乘3,当您获得用户输入时,只需存储不同的数组,以便更容易排序。基于列而不是行存储矩阵。你可以这样做:

Scanner scan = new Scanner(System.in);
int[] col1 = new int[3];
int[] col2 = new int[3];
int[] col3 = new int[3];
for (int i=0; i<3; i++){ //Store based on column not row
    col1[i] = scan.nextInt();
    col2[i] = scan.nextInt();
    col3[i] = scan.nextInt();
}
int[][] matrix = new int[3][3];
matrix[0] = col1;
matrix[1] = col2;
matrix[2] = col3;
for (int i=0; i<3; i++){  //Sort columns
    Arrays.sort(matrix[i]);
}
//The following code is used to print your array properly by rows instead of columns 
for (int i=0; i<3; i++){
    for (int j=0; j<3; j++){
        System.out.print(matrix[j][i]+" ");
    }
    System.out.println();
}

按列排序后,您可以将矩阵转换回按行存储,以便在需要时更容易打印。

如果您想让用户设置矩阵的大小以使其动态化,您可以执行以下操作:

Scanner scan = new Scanner(System.in);
int N = 3;  //Size of matrix, You can have user input this as well. 

int[][] matrix = new int[N][N];
for (int n=0; n<N; n++){  //Initialize Columns
    for (int column=0; column<N; column++){
        matrix[column][n] = scan.nextInt();  //Store based on column
    }
}
for (int i=0; i<N; i++){  //Sort columns
    Arrays.sort(matrix[i]);
}
//The following code is used to print your array properly by rows instead of columns 
for (int i=0; i<N; i++){
    for (int j=0; j<N; j++){
        System.out.print(matrix[j][i]+" ");
    }
    System.out.println();
}

答案 4 :(得分:0)

这是一个适用于你的cas的解决方案。要按列排序,我按列检索值,然后将这些值存储到数组列表中并对其进行排序,并将排序后的值存储回列中(反转循环)。

public static void main(String[] args) {
        int[][] x = new int[][]{{15,87,37},{55,5,22},{30,12,40}};

        ArrayList<Integer> a = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                a.add(x[j][i]);
            }
            Collections.sort(a);
            for (int k = 0; k < 3; k++) {
                x[k][i] = a.get(k);
            }
            a = new ArrayList<>();
        }

        //for loop for testing purpose
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
               System.out.print(x[i][j] + ",");
            }
            System.out.println("\n");
        }
     }
  

15,5,22,
                                                                                                                                                                                                                                                       30,12,37,
                                                                                                                                                                                                                                                           55,87,40,