【问题标题】:How to sort 2D array(int) without converting it into 1D array in java?java - 如何在不将其转换为Java中的一维数组的情况下对二维数组(int)进行排序?
【发布时间】:2015-08-12 13:24:39
【问题描述】:

如何对二维数组进行排序而不将其转换为一维数组。 这就是我所做的 -

private int[][] data2D = {{1,2,3},{6,8},{3,2,5,2}};

private void sortCustom(){

    int totalElements = 0;

    // calculating total elements
    for(int[] i : data2D){
        totalElements = totalElements+i.length;
    }


    int[] data1D = new int[totalElements];
    int m = 0 ;
    // converting 2D data into 1D
    for(int i=0 ; i<data2D.length ; i++ ){
        for(int j=0 ; j<data2D[i].length ; j++){
            data1D[m++] = data2D[i][j];
        }
    }

    // sorting data 
    Arrays.sort(data1D);

    //converting 1D data into 2D
    int n=0;
    for(int i=0 ; i<data2D.length ; i++){
        for(int j=0 ; j<data2D[i].length ; j++){
            data2D[i][j] = data1D[n++];
        }
    }

    // print sorted data 
    for(int i=0 ; i<data2D.length ; i++){
        for(int j=0 ; j<data2D[i].length ; j++){
            System.out.print(data2D[i][j]+" ");
        }
        System.out.println();
    }

}

输出:
1 2 2
2 3
3 5 6 8

如您所见,我可以在将二维数组转换为一维数组后对其进行排序。我的问题是如何对二维数组进行排序而不将其转换为一维数组?

我想缩短所有值,而不是逐行

【问题讨论】:

  • 您所做的也可以应用于 2D、3D 或 nD。您对每个 n 维进行冒泡排序。这甚至可以独立于你有多少维度来完成。你也可以看看Radix 来了解它是怎么做的,因为这个想法有点相似。
  • 二维数组只是数组的数组。遍历你的数组并对它们进行排序。
  • 如果您查看他的输入和输出,他似乎想要对所有值进行排序,而不仅仅是对每个单独的数组进行排序。
  • 是的,我想对所有值进行排序,否则我会将每个项目视为一个数组

标签: java arrays sorting


【解决方案1】:

你可以使用bubble sorting,对于一个简单的数组你必须使用2个嵌套的for-loops,所以对于一个二维数组你必须使用3个嵌套的for-loops

for(int i = 0; i < data2D.length; i++){
    for(int j = 0; j < data2D[0].length; j++){
        for(int k = 0; k < data2D[j].length; k++){
            if(data2D[i][k]>data2D[i][k+1]){
                int temp = data2D[i][k];
                data2D[i][k] = data2D[i][k+1];
                data2D[i][k+1] = temp;
            }    
        }
    }
}

【讨论】:

    【解决方案2】:

    使用排序(冒泡排序、快速排序)算法。根据您的需要进行选择,如果您的数据很小,则根本没有关系。否则选择 O(nlogn) 算法

    【讨论】:

      【解决方案3】:

      试试这样的:

      使用重载数组#Sort(T[] a, Comparator c),它将 Comparator 作为第二个参数。

      double[][] array= {
      {1, 5},
      {13, 1.55},
      {12, 100.6},
      {12.1, .85} };
      
      java.util.Arrays.sort(array, new java.util.Comparator<double[]>() {
         public int compare(double[] a, double[] b) {
             return Double.compare(a[0], b[0]);
         }
      });
      

      【讨论】:

        猜你喜欢
        • 2016-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-14
        • 2013-05-26
        • 1970-01-01
        • 1970-01-01
        • 2013-11-29
        相关资源
        最近更新 更多