Мне нужно построить функцию, которая сортирует матрицу по строкам, а затем по столбцам или наоборот, сохраняя значения внутри матрицы.Матрица представляет собой огромную матрицу, поэтому алгоритм, который я использую, должен быть алгоритмом nlogn.
У меня есть следующая структура:
typedef struct{
unsigned int line, column;
float value;}Matrix;
Matrix matrix[size_of_matrix*size_of_matrix];
static int numb_of_matrix; /*Whenever I ask the user to insert values to the matrix, I increase this number to insert the structure inside my vector matrix*/
Я также храню индексы maximun и minimunстроки и столбцы, которые заполняются пользователем, и индексы между этими границами устанавливаются как 0, поэтому я создаю матрицу size_of_matrix * size_of_matrix, полную нулей, а затем вставляю туда свои значения, сохраняя при этом самый высокий и самый низкий индекс строки истолбец, заполненный пользователем.
Учитывая это, мне нужно отсортировать свою матрицу, отсортировав их в порядке возрастания строк, а затем в порядке возрастания столбцов или наоборот.То, как я должен знать, каким образом мне нужно сортировать матрицу, это попросить пользователя ввести C, если мне нужно сначала отсортировать матрицу по столбцам, если мне нужно сначала отсортировать матрицу по строкам.
Итак, если бы я ввел в матрицу следующее:
[0,3]=1.2
[3,0]=2.1
[4,5]=2.2
[2,5]=3.2
[3,5]=4.2
, а затем сначала отсортировал его по строкам, он должен стать
[0,3]=1.2
[2,5]=3.2
[3,0]=2.1
[3,5]=4.2
[4,5]=2.2
Эта проблема будетбыстро решить, была ли матрица достаточно маленькой, но моя матрица будет иметь около 1 миллиона значений, поэтому я не могу использовать подобные сортировки пузырьков или любой другой алгоритм сортировки n ^ 2.