Сортировать строки матрицы по возрастанию их минимумов - C (СИ)
Формулировка задачи:
Написать программу, которая позволяет в каждой строке квадратной матрицы искать минимум и сортировать эти строки по возрастанию этих характеристик.
Решение задачи: «Сортировать строки матрицы по возрастанию их минимумов»
textual
Листинг программы
- #include <stdio.h>
- int main(void) {
- const x=5; // Количество столбцов
- const y=10; // Количество строк
- long arrM1[100][100];
- long arrM2[100][100];
- long arrExtr[100], arrOrder[100], arrInUse[100], lngLastExtr;
- int i, j;
- // Инициализация матрицы
- for(j = 0; j <= x - 1; j++)
- {
- arrExtr[j] = 2147483647;
- for(i = 0; i <= y - 1; i++)
- {
- arrM1[i][j] = (int)random()/1000000;
- if (j == 3) arrM1[i][j] = arrM1[i][0];
- //printf("arrM1[%d][%d]%d\n", i, j, arrM1[i][j]);
- }
- }
- // Поиск минимумов
- for(j = 0; j <= x - 1; j++)
- {
- for(i = 0; i <= y - 1; i++)
- {
- if(arrExtr[j] > arrM1[i][j]) arrExtr[j] = arrM1[i][j];
- }
- //printf("!!!arrExtr[%d] = %d\n", j, arrExtr[j]);
- }
- // Определение порядка столбцов
- for(j = 0; j <= x - 1; j++)
- {
- lngLastExtr = 2147483647;
- for(i = 0; i <= x - 1; i++)
- {
- if(lngLastExtr > arrExtr[i] && arrInUse[i] != 1)
- {
- arrOrder[j] = i;
- lngLastExtr = arrExtr[arrOrder[j]];
- }
- }
- arrInUse[arrOrder[j]] = 1;
- //printf("arrOrder[%d] = %d, arrInUse[%d] = %d\n", j, arrOrder[j], arrOrder[j], arrInUse[arrOrder[j]]);
- }
- // Сортировка столбцов
- for(j = 0; j <= x - 1; j++)
- {
- for(i = 0; i <= y - 1; i++)
- {
- arrM2[i][j] = arrM1[i][arrOrder[j]];
- }
- }
- // Вывод результат
- printf("\nИСХОДНАЯ МАТРИЦА\n");
- for(i = 0; i <= y - 1; i++)
- {
- for(j = 0; j <= x - 1; j++)
- {
- printf("%d ", arrM1[i][j]);
- }
- printf("\n");
- }
- printf("\nПРЕОБРАЗОВАННАЯЯ МАТРИЦА\n");
- for(i = 0; i <= y - 1; i++)
- {
- for(j = 0; j <= x - 1; j++)
- {
- printf("%d ", arrM2[i][j]);
- }
- printf("\n");
- }
- return 0;
- }
Объяснение кода листинга программы
Код представлен на языке C и выполняет сортировку строк матрицы по возрастанию их минимумов. Вот список действий, которые выполняются в коде:
- Инициализация матрицы. Вектор arrExtr инициализируется значением 2147483647, которое больше любого возможного значения в матрице. Для каждого элемента матрицы arrM1 выбирается случайное значение от 0 до 1000000. Если выбранный элемент находится в третьем столбце, он заменяется на значение из первого столбца (arrM1[i][0]).
- Поиск минимумов. Для каждого столбца матрицы arrExtr ищется минимальное значение. Если текущее значение в столбце меньше значения в arrExtr, оно заменяет значение в arrExtr.
- Определение порядка столбцов. Для каждого столбца матрицы ищется последнее минимальное значение в столбце, и если оно меньше значения в arrExtr и arrInUse не равно 1, оно становится новым значением в arrOrder и arrInUse устанавливается в 1.
- Сортировка столбцов. Для каждого столбца матрицы arrM1 выбирается значение из соответствующего столбца arrOrder.
- Вывод результата. И исходная матрица arrM1, и преобразованная матрица arrM2 выводятся на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д