2015-08-12 1 views
-2

Как я могу отсортировать массив 2d без преобразования его в 1d-массив. Это то, что я сделал -Как отсортировать 2D-массив (int) без преобразования его в массив 1D в java?

частный 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(); 
    } 

} 

выход:

Как вы можете видеть, что я в состоянии сортировать 2d массив после преобразования его в 1d. Мой вопрос в том, как я могу отсортировать массив 2d без преобразования его в 1-й массив?

Я хочу Короче говоря, все значения, а не грести по строкам

+0

Вы также можете использовать 2D, 3D или nD. Вы пузырь сортируете каждый n-мерный размер. Это может быть сделано независимо от того, сколько у вас размеров. Вы также можете ознакомиться с [Radix] (https://en.wikipedia.org/wiki/Radix_sort), чтобы узнать, как это происходит, поскольку идея несколько похожа. – Emz

+0

2D-массив - это всего лишь массив массивов. Итерируйте через свои массивы и сортируйте их. – BoDidely

+0

Если вы посмотрите на его ввод и вывод, похоже, он хочет сортировать все значения, а не просто сортировать каждый отдельный массив. –

ответ

0

Просто попробуйте что-то вроде этого:

Использование перегружен Массивы # Sort (T [] а, компаратор с), который принимает 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]); 
    } 
}); 
1

Вы можете использовать bubble sorting, для простого массива необходимо использовать два вложенных for-loops, поэтому для 2d массива вы должны использовать три вложенных 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

Используйте сортировку (BubbleSort, QuickSort) алгоритмы , Выберите для своей потребности, если ваши данные малы, это не имеет значения. В противном случае выберите O (nlogn) алгоритмы.

Смежные вопросы