Перестановка строк двумерного массива - 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, которая сортирует двумерный массив (матрицу) методом сортировки выбором. Список действий:

  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
Похожие ответы