Перестановка строк двумерного массива - C (СИ)
Формулировка задачи:
Переставить строки двумерного массива по убыванию значений максимальных елементов строк.
Решение задачи: «Перестановка строк двумерного массива»
textual
Листинг программы
#include <stdio.h> #include <malloc.h> #define N 5 int array_max(int* fa, int* la); void swap_int(int* a, int* b); //сортировка выбором int matrix_smax(int mat[][N]){ int i, j, k; int* arr = (int*)malloc(N * sizeof(int)); if(arr == NULL) return 0; for(i = 0; i < N; ++i) arr[i] = array_max(mat[i], mat[i] + N); for(i = 0; i < N; ++i){ k = i; for(j = i + 1; j < N; ++j){ if(arr[j] > arr[k]) k = j; } if(i != k){ swap_int(&arr[i], &arr[k]); for(j = 0; j < N; ++j) swap_int(&mat[k][j], &mat[i][j]); } } free(arr); return 1; } int main(void){ int i, j; int mat[N][N] = { { 0, 4, 2, 3, 7 }, { 0, 1, 2, 3, 4 }, { 4, 5, 8, 5, 0 }, { 3, 3, 3, 3, 9 }, { 1, 1, 6, 3, 0 } }; matrix_smax(mat); for(i = 0; i < N; ++i){ for(j = 0; j < N; ++j) printf("%d ", mat[i][j]); putchar('\n'); } return 0; } //максимум int array_max(int* fa, int* la){ int m = (fa < la) ? *fa++ : 0; for(; fa != la; ++fa){ if(*fa > m) m = *fa; } return m; } //обмен void swap_int(int* a, int* b){ int t = *a; *a = *b; *b = t; }
Объяснение кода листинга программы
Код представляет собой функцию matrix_smax, которая сортирует двумерный массив (матрицу) методом сортировки выбором. Список действий:
- Создается функция array_max, которая находит максимум в отрезке массива.
- Создается функция swap_int, которая меняет значения двух переменных.
- В функции matrix_smax создается массив arr, в который будут копироваться максимальные значения из каждого столбца матрицы.
- Происходит итерация по каждому столбцу матрицы, и в arr записывается максимальное значение из этого столбца.
- Происходит итерация по всем элементам матрицы, начиная с левого верхнего угла, и в каждой итерации ищутся два элемента, которые нужно поменять местами, чтобы удовлетворить условию возрастания.
- Если такие элементы найдены, они меняются местами и меняется порядок соответствующих строк в матрице.
- В конце функция освобождает память, выделенную под массив arr.
- В функции main создается матрица mat, заполненная исходными данными.
- Вызывается функция matrix_smax, чтобы отсортировать матрицу.
- Выводится отсортированная матрица.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д