Перестановка строк двумерного массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Перестановка строк двумерного массива»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define  N  5
  4. int  array_max(int* fa, int* la);
  5. void swap_int(int* a, int* b);
  6.  
  7. //сортировка выбором
  8. int matrix_smax(int mat[][N]){
  9.     int  i, j, k;
  10.     int* arr = (int*)malloc(N * sizeof(int));
  11.     if(arr == NULL)
  12.         return 0;
  13.  
  14.     for(i = 0; i < N; ++i)
  15.         arr[i] = array_max(mat[i], mat[i] + N);
  16.    
  17.     for(i = 0; i < N; ++i){
  18.         k = i;
  19.         for(j = i + 1; j < N; ++j){
  20.             if(arr[j] > arr[k])
  21.                 k = j;
  22.         }
  23.  
  24.         if(i != k){
  25.             swap_int(&arr[i], &arr[k]);
  26.             for(j = 0; j < N; ++j)
  27.                 swap_int(&mat[k][j], &mat[i][j]);
  28.         }
  29.     }
  30.     free(arr);
  31.     return 1;
  32. }
  33.  
  34. int main(void){
  35.     int i, j;
  36.     int mat[N][N] = {
  37.         { 0, 4, 2, 3, 7 },
  38.         { 0, 1, 2, 3, 4 },
  39.         { 4, 5, 8, 5, 0 },
  40.         { 3, 3, 3, 3, 9 },
  41.         { 1, 1, 6, 3, 0 }
  42.     };
  43.    
  44.     matrix_smax(mat);
  45.     for(i = 0; i < N; ++i){
  46.         for(j = 0; j < N; ++j)
  47.             printf("%d ", mat[i][j]);
  48.         putchar('\n');
  49.     }
  50.     return 0;
  51. }
  52.  
  53. //максимум
  54. int array_max(int* fa, int* la){
  55.     int m = (fa < la) ? *fa++ : 0;
  56.     for(; fa != la; ++fa){
  57.         if(*fa > m)
  58.             m = *fa;
  59.     }
  60.     return m;
  61. }
  62.  
  63. //обмен
  64. void swap_int(int* a, int* b){
  65.     int t = *a;
  66.     *a = *b;
  67.     *b = t;
  68. }

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

Код представляет собой функцию matrix_smax, которая сортирует двумерный массив (матрицу) методом сортировки выбором. Список действий:

  1. Создается функция array_max, которая находит максимум в отрезке массива.
  2. Создается функция swap_int, которая меняет значения двух переменных.
  3. В функции matrix_smax создается массив arr, в который будут копироваться максимальные значения из каждого столбца матрицы.
  4. Происходит итерация по каждому столбцу матрицы, и в arr записывается максимальное значение из этого столбца.
  5. Происходит итерация по всем элементам матрицы, начиная с левого верхнего угла, и в каждой итерации ищутся два элемента, которые нужно поменять местами, чтобы удовлетворить условию возрастания.
  6. Если такие элементы найдены, они меняются местами и меняется порядок соответствующих строк в матрице.
  7. В конце функция освобождает память, выделенную под массив arr.
  8. В функции main создается матрица mat, заполненная исходными данными.
  9. Вызывается функция matrix_smax, чтобы отсортировать матрицу.
  10. Выводится отсортированная матрица.

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


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

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

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы