如何在不将其转换为java中的1D数组的情况下对2D数组(int)进行排序?

时间:2015-08-12 13:24:40

标签: java arrays sorting

如何在不将其转换为1d数组的情况下对2d数组进行排序。 这就是我所做的 -

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数组转换为1d后对其进行排序。我的问题是如何在不将其转换为1d数组的情况下对2d数组进行排序?

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

3 个答案:

答案 0 :(得分:1)

您可以使用bubble sorting,对于简单数组,您必须使用2个嵌套for-loops,因此对于2d数组,您必须使用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;
            }    
        }
    }
}

答案 1 :(得分:1)

使用排序(bubblesort,quicksort)算法。根据您的需要选择,如果您的数据很小,则根本不重要。否则选择O(nlogn)算法

答案 2 :(得分:0)

试试这样的事情:

使用重载数组#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]);
   }
});