【问题标题】:Sort a 2-D Matrix Column and Row wise together将二维矩阵列和行一起排序
【发布时间】:2017-02-26 11:50:03
【问题描述】:
-1 -3 -2        -3 -2 -1
 2  3 -2        -2  2  3 
 5  7  4         4  5  7 
(Orignal)        (Sorted)

我可以仅基于行或仅列对矩阵进行排序。 但是考虑到列和行,我无法获得对矩阵进行排序的最佳解决方案。

有什么建议可以实现吗?

【问题讨论】:

    标签: java sorting matrix


    【解决方案1】:

    您可以将任何二维数组转换为一维数组,并且易于排序。

    您不必实际更改 2D 数组,只需使用索引即可:

    [0][0] = [0]
    [1][0] = [length]
    [N][K] = [(length*N) + K]
    

    【讨论】:

    • @UrviG - 二维数组中的索引 [0][0] 相当于一维数组中的索引 [0]。索引[1][0]等价于[行的长度],一般的[N][K]索引等价于[(行的长度*N)+K]。现在您有了一个一维数组,很容易对其进行排序。
    • 谢谢,我知道这一点.. 但是如果我对这 3 个单独的 1D 数组进行排序,矩阵将仅对 row 进行排序。
    • 不,您不会查看 3 个一维数组。您查看 1 个一维数组,其中包含 9 个元素。
    • -1 -3 -2 2 3 -2 5 7 4 Orignal matrix Array -3 -2 -2 -1 2 3 4 5 7 Orignal Sorted Array 如何从中获得解决方案? ://
    • 将[i]中的元素放入[i/3][i%3]中。
    【解决方案2】:

    使用这两个函数:

    public static void sortRows(int[][] matrix){
        for (int i = 0; i < matrix.length; i++) {
            Arrays.sort(matrix[i]);
        }
    }
    
    public static void transpose(int[][] matrix){
        for (int i = 0; i < matrix.length; i++) {
            for (int j = i; j < matrix[0].length; j++) {
                int tmp1 = matrix[i][j];
                int tmp2 = matrix[j][i];
                matrix[j][i] = tmp1;
                matrix[i][j] = tmp2;
            }
        }
    }
    

    您可以对行进行排序,转置矩阵,再次对行进行排序(转置列)并将其转回:

    int[][] matrix = {{-1, -3, -2}, {2,  3, -2}, {5, 7,  -4}};
    sortRows(matrix);
    transpose(matrix);
    sortRows(matrix);
    transpose(matrix); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 2021-06-17
      • 1970-01-01
      • 2015-01-31
      • 2015-09-17
      • 2020-08-15
      • 2020-03-19
      相关资源
      最近更新 更多