2016-12-08 2 views
0

Я пытаюсь настроить метод, который будет сортировать двумерный массив удвоений по столбцу. Исходя из предоставленных спецификаций, этот метод также не должен принимать рваные массивы с рядами неравных длин. Я тестирование это с помощью двойной [] [] mdarray = {{3,0, 4,0, 1,0, 8,0}, {13,0, 2,0, 12,0, 9,0}Java: Сортировка 2D-массива по столбцам без массивов .sort()

Используя метод печати, это должно отображаться как

3,0, 2,0, 1,0, 8,0,

13,0, 4,0, 12,0, 9,0,

При использовании отдельного метода печати для вывода результата, массив, как представляется, без изменений. Я думаю, что моя проблема заключается в том, как проверить каждую строку для данного столбца, прежде чем перейти к следующему, но я не уверен, как это сделать без метода Arrays.sort(), который не допускается для этого упражнения.

public void sort(boolean byColumn) 
{ 
    if(isRagged() == true) 
    { 
     System.out.println("Ragged arrays cannot be sorted by column."); 
    } 
    else 
    { 
     for(int i = 0; i < mdarray.length; i++) 
     { 
      for(int j = i + 1; j < mdarray.length - 1; j ++) 
      { 
       for(int k = 0; k < mdarray[i].length; k++) 
       { 
        if(mdarray[i][k] > mdarray[j][k]) 
        { 
         double temp = mdarray[i][k]; 
         mdarray[i][k] = mdarray[j][k]; 
         mdarray[i][k] = temp; 
        } 
       } 
      } 
     } 
    } 
} 
+0

'mdarray [i] [k] = temp;' должно быть 'mdarray [i] [j] = temp;' – shmosel

+0

Я просто попробовал это. Выходные данные все те же. –

+0

@shmosel, вероятно, вы подразумевали, что это должно быть 'mdarray [j] [k] = temp' – radoh

ответ

1

Вы фактически перешли границы i и j переменных, а также. Так как j выполняет итерацию от i+1, он должен получать значения до mdarray.length - 1, поэтому условие должно быть j < mdarray.length, и аналогичным образом верхняя граница i должна быть mdarray.length - 2, поэтому условие должно быть i < mdarray.length - 1.

О, а также есть ошибка, о которой мы упоминали в комментариях - при переключении элементов присвойте переменную temp значение mdarray[j][k].

1

Как вы знаете, вы можете рассматривать 2D-массив как группу столбцов или строк. Эта программа должна сортировать столбцы, поэтому мы рассмотрим массив как группу столбцов.

Программа выполняется:

  1. петли все столбцы
  2. выбрать свой любимый алгоритм сортировки 1D массив (посмотрите here)

    double[][] mdarray = {{3.0, 4.0, 1.0, 8.0}, {13.0, 2.0, 12.0, 9.0}}; 
    
    //loop all columns 
    for(int col = 0; col < mdarray[0].length; col++){ 
    
        //loops all rows and use bubble sort algorithm in ascending order 
        for(int i = 1; i < mdarray.length; i++){ 
    
         for(int j = i; j < mdarray.length; j++){ 
          if(mdarray[j - 1][col] > mdarray[j][col]){ 
           //swap 
           double temp = mdarray[j][col]; 
           mdarray[j][col] = mdarray[j-1][col]; 
           mdarray[j-1][col] = temp; 
          } 
         } 
        } 
    } 
    

Если вы печатаете каждый ряд mdarray, выход будет:

mdarray[0]: 3.0 2.0 1.0 8.0 
mdarray[1]: 13.0 4.0 12.0 9.0