Сортировать строки матрицы по возрастанию их минимумов - 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 выводятся на экран.