Строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом - 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;
}

Объяснение кода листинга программы

  1. В начале программы объявляются переменные:
    • const unsigned n - размерность матрицы;
    • int min и max - для отслеживания минимального и максимального значения в матрице;
    • unsigned i и j - для обхода матрицы;
    • int matr[][n] - сама матрица;
    • unsigned k - для подсчета количества элементов в строке при сортировке;
    • unsigned *tmp - временный массив для сортировки;
    • int main() - функция main, в которой находится основной код программы.
  2. В основной функции сначала вычисляются сумма элементов матрицы и минимальное и максимальное значения.
  3. Затем проверяется условие для сортировки матрицы: сумма элементов не должна превышать 2*(минимальное значение + максимальное значение).
  4. Если условие выполняется, то матрица сортируется.
  5. Для сортировки используется временный массив tmp, в котором размещаются числа от минимального значения до максимального с шагом в 1.
  6. Затем, для каждой строки матрицы, в порядке возрастания, начиная с минимального значения, добавляются числа из временного массива, пока не будет исчерпан временный массив или не будет заполнена строка.
  7. После сортировки матрица выводится на экран.
  8. В конце программы требуется нажать любую клавишу для выхода.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы