Строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом - C (СИ)
Формулировка задачи:
Если сумма элементов матрицы А размерности nxn больше удвоенной суммы максимального и минимального элементов матрицы, то все строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом, в противном случае матрицу оставить без изменения.
Решение задачи: «Строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
int main()
{
const unsigned n = 4;
int min = 32767, max = -32767, sum = 0;
unsigned i = 0, j = 0;
int matr[][n] = { {1, 2, 3, 1},
{2, 2, 1, 3},
{2, 1, 3, 2},
{1, 2, 3, 2} };
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
sum += matr[i][j];
if (max < matr[i][j]) max = matr[i][j];
if (min > matr[i][j]) min = matr[i][j];
}
}
if (sum > 2 * (min + max))
{
for (i = 0; i < n; i++)
{
const unsigned tmpn = max - min + 1;
unsigned *tmp;
tmp = (unsigned*)calloc(tmpn, sizeof(unsigned));
for (j = 0; j < tmpn; j++)
tmp[j] = 0;
for (j = 0; j < n; j++)
++tmp[matr[i][j] - min];
unsigned k = 0;
for (j = 0; j < tmpn; j++)
{
while (tmp[j] && k < n)
{
matr[i][k++] = j + min;
tmp[j]--;
}
}
free(tmp);
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("\t%i", matr[i][j]);
printf("\n");
}
}
getchar();
return 1;
}
Объяснение кода листинга программы
- В начале программы объявляются переменные:
const unsigned n- размерность матрицы;int minиmax- для отслеживания минимального и максимального значения в матрице;unsigned iиj- для обхода матрицы;int matr[][n]- сама матрица;unsigned k- для подсчета количества элементов в строке при сортировке;unsigned *tmp- временный массив для сортировки;int main()- функция main, в которой находится основной код программы.
- В основной функции сначала вычисляются сумма элементов матрицы и минимальное и максимальное значения.
- Затем проверяется условие для сортировки матрицы: сумма элементов не должна превышать 2*(минимальное значение + максимальное значение).
- Если условие выполняется, то матрица сортируется.
- Для сортировки используется временный массив
tmp, в котором размещаются числа от минимального значения до максимального с шагом в 1. - Затем, для каждой строки матрицы, в порядке возрастания, начиная с минимального значения, добавляются числа из временного массива, пока не будет исчерпан временный массив или не будет заполнена строка.
- После сортировки матрица выводится на экран.
- В конце программы требуется нажать любую клавишу для выхода.