Мне поставили задачу, и мне сказали решить ее в O (n ^ 3), потому что, очевидно, в O (n ^ 2) это невозможно, O (n ^ 2) была исходной задачей, но она была изменена. , Задача состоит в том, чтобы написать алгоритм, который проходит через каждую строку матрицы n * n, а затем распечатать всю матрицу в виде отсортированного массива. Каждая строка матрицы уже отсортирована.
Вот то, что у меня есть, и я думаю, что это O (n ^ 2), но я все еще изучаю big-O должным образом, поэтому мне нужно подтверждение, если я это сделал. Для сортировки массива используется метод утилиты сортировки вставками. Спасибо
public int[] mergeMatrix(int[][] matrix) {
int length = matrix.length;
int [] sortedMatrixArray = new int[length * length];
int loop = 1;
for (int[] i : matrix) {
for (int j = 0; j < length; j++) {
switch (loop) {
case 1:
sortedMatrixArray[j] = i[j];
break;
case 2:
sortedMatrixArray[j + 3] = i[j];
break;
case 3:
sortedMatrixArray[j + 6] = i[j];
break;
}
}
loop++;
}
insertionSort(sortedMatrixArray);
return sortedMatrixArray;
}
private void insertionSort(int[] array) {
for (int firstUnsortedIndex = 0; firstUnsortedIndex < array.length; firstUnsortedIndex++) {
int newElement = array[firstUnsortedIndex];
int i;
for (i = firstUnsortedIndex; i > 0 && array[i-1] > newElement; i--) {
array[i] = array[i-1];
}
array[i] = newElement;
}
}
EDIT:
public int[] mergeMatrix(int[][] matrix) {
int length = matrix.length;
int [] sortedMatrixArray = new int[length * length];
int loop = 0;
for (int[] i : matrix) {
for (int j = 0; j < length; j++) {
if (loop == 0) {
sortedMatrixArray[j] = i[j];
}
sortedMatrixArray[j + (length*loop)] = i[j];
}
loop++;
}
insertionSort(sortedMatrixArray);
return sortedMatrixArray;
}