Перестановка строк двумерного массива - 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, чтобы отсортировать матрицу.
- Выводится отсортированная матрица.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д