2013-11-26 4 views
1

У меня завтра есть тест, где мы пишем код, основанный на запросе. Мне нужно некоторое объяснение того, как сортировать 2D-массив в порядке возрастания. Я могу сделать это для 1D-массива, но я не уверен, что тот же код будет работать для 2D. Можете ли вы просто объяснить, как реализовать это для 2D-массива по-своему, я не хочу, чтобы вы думали, что это для домашней работы, мне просто нужно знать, как это сделать завтра. БлагодаряКак отсортировать 2D-массив в порядке возрастания? Java

for (i = 0; i < a.length - 1; i++) { 
for (j = i+1; j < a[0].length; j++) { 
     if (a[i] < a[j]) { 
      int temp = a[i]; 
      a[i] = a[j]; 
      a[j] = temp; 
      System.out.print(temp); 
     } 
} 

}

+2

Можете ли вы описать, что означает «в порядке» для 2-мерного массива? Есть ли один или несколько столбцов, которые используются для определения отсортированного 2-мерного массива? – NormR

+0

Возможно, это помогает http://stackoverflow.com/questions/20931669/sort-a-2d-array-in-c-using-built-in-functionsor-any-other-method – prime

+0

Это ответ на этот вопрос. http://stackoverflow.com/questions/18705127/how-to-sort-a-2d-array/41853842#41853842 – prime

ответ

1

Кажется, что вы хотите отсортировать каждую строку своей матрицы. Вы можете просто перейти на каждую строку и сортировки, используя вне-полки метод Java, учитывая a это двумерный массив:

for (i = 0; i < a.length; i++) { 
    Arrays.sort(a[i]); 
} 

В любом случае ваш вопрос не ясен для меня, и я присоединяюсь к @Normr на его комментарий.

0

Один из способов, чтобы это в основном для осуществления выбора рода (так что вы перебирать элементы в порядке, в котором вы хотите элементы для сортировки, и для каждого элемента вы поиск через остальная часть таблицы - ИСКЛЮЧЕНИЕ элементов перед вашим текущим элементом - выберите самый маленький элемент и замените его на текущий элемент). Это будет O (n^2), где n - общий размер вашего массива.

Другой способ заключается в том, чтобы скопировать элементы в 1-й массив, использовать любой правильный алгоритм для его сортировки, а затем скопировать упорядоченные элементы для исправления мест в вашем 2-мерном массиве (чтобы он сортировался так, как вы хотите). При правильном наборе данных это может быть O (n), поскольку для копирования требуется O (n) и может принимать O (n) для подсчета сортировки или сортировки ведра (если они будут соответствовать вашему набору). В худшем случае это будет O (nlogn), так как вы могли бы использовать MergeSort, HeapSort, QuickSort или любой алгоритм сортировки на основе сравнения.

0

согласно вашему описанию, я думаю, вы могли бы решить проблему, как это.

Сначала зациклируйте 2D-массив и поместите каждый элемент в массивList. , используйте метод exists Collections.sort (List paramList) для сортировки arrayList.

вы получите отсортированный список в конце.

1

Сделать 2D-массив отдельным массивом (1D) (ШАГ 1).
Затем используйте метод Arrays.sort() для сортировки простого массива (STEP 2).
Затем задайте каждое пространство 2D-массива как количество столбцов в поперечнике (координата X, где пространство будет изменено), умноженное на количество пробелов в строке в 2D-массиве. Затем добавьте номер строки (Y-координату, где пространство будет изменено), и вы получите индекс простой строки, которая вам нужна (ШАГ 3).

Мой метод печати находится внизу.

public static void sort2DArray(int[][] arrayName) 
{ 
    int[] simpleArray = new int[(arrayName[0].length)*(arrayName.length)]; 
    for(int r = 0; r < arrayName.length; r++) //CYCLE THROUGH ROWS (Y VALUES) 
    { 
     for(int c = 0; c < arrayName[0].length; c++) //CYCLE THROUGH COLUMNS (X VALUES) 
     { 

      simpleArray[arrayName[0].length*r+c] = arrayName[r][c]; //*STEP 1* 
     } 
    } 
    Arrays.sort(simpleArray); //*STEP 2* 

    for(int r = 0; r < arrayName.length; r++) //CYCLE THROUGH ROWS (Y VALUES) 
    { 
     for(int c = 0; c < arrayName[0].length; c++) //CYCLE THROUGH COLUMNS (X VALUES) 
     { 
      arrayName[r][c] = (simpleArray[(r * arrayName[0].length) + c ]); //*STEP 3* 
     } 
    } 
} 

public static void print2DArrayAsTable(int[][] arrayName) //METHOD TO PRINT A 2D ARRAY AS A TABLE 
{ 
    for(int c = 0; c < arrayName.length; c++) //CYCLE THROUGH COLUMNS (X VALUES) 
    { 
     for(int r = 0; r < arrayName[0].length; r++) //CYCLE THROUGH ROWS (Y VALUES) 
     { 
      p.o(arrayName[c][r] + " "); //PRINT INDIVIDUAL ARRAY SPACE VALUE 
     } 
     p.l(); 
    } 
} 
Смежные вопросы