Подсказка: если вы добавите строку комментария в свой код, это определенно означает, что лучше выделить часть кода в отдельный метод.
В вашем случае я рекомендуюреализовать еще два метода: sortByColumn(int[][] arr)
и sortByRow(int[][] arr)
, потому что использование sort(arr, true)
не так понятно с первого взгляда (что именно означает true
).
Открытые методы для клиентов (ясно дляuse):
public static void sortByColumn(int[][] arr) {
sort(arr, true);
}
public static void sortByRow(int[][] arr) {
sort(arr, false);
}
Реализация сортировки (защищена и недоступна клиенту напрямую):
prvate static void sort(int[][] arr, boolean byColumn) {
int[] temp = convertToSimpleArray(arr);
selectionSort(temp);
if (byColumn) {
for (int row = 0, i = 0; row < arr.length; row++)
for (int col = 0; col < arr[row].length; col++)
arr[row][col] = temp[i++];
} else {
for (int col = 0, i = 0; i < temp.length; col++)
for (int row = 0; row < arr.length; row++)
if (col < arr[row].length)
arr[row][col] = temp[i++];
}
}
Метод создания одномерного массива из заданного 2D-массива:
private static int[] convertToSimpleArray(int[][] arr) {
int total = 0;
for (int row = 0; row < arr.length; row++)
for (int col = 0; col < arr[row].length; col++)
total++;
int[] res = new int[total];
for (int row = 0, i = 0; row < arr.length; row++)
for (int col = 0; col < arr[row].length; col++)
res[i++] = arr[row][col];
return res;
}
Метод для массива сортировки с необходимым алгоритмом сортировки:
private static void selectionSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] >= arr[i])
continue;
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
Ввод:
int[][] arr = {
{ 19, 44, 16, 39, 26 },
{ 42, 6, 30 },
{ 44, 37, 0, 46 },
{ 37, 42, 48, 19, 40 } };
Вывод:
sortByColumn(arr) provides:
0 6 16 19 19
26 30 37
37 39 40 42
42 44 44 46 48
sortByRow(arr) provides:
0 19 37 42 46
6 26 39
16 30 40 44
19 37 42 44 48