Упорядочить строки матрицы в порядке возрастания их последних элементов - C (СИ)

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

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

Дана матрица А размера n m. Упорядочить строки матрицы в порядке возрастания их последних элементов. помогите :с

Решение задачи: «Упорядочить строки матрицы в порядке возрастания их последних элементов»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define N  10
#define M  5
static void m_qsort(int m[][M], int l, int r, int col);
void sort_matrix(int m[][M], int col);
 
int main(void){
    int i, j, m[N][M];
    for(i = 0; i < N; ++i){
        for(j = 0; j < M; ++j){
            m[i][j] = rand() % 10;
            printf("%d ", m[i][j]);
        }
        putchar('\n');
    }
    putchar('\n');
 
    //сортируем по последнему столбцу
    sort_matrix(m, M - 1);
    for(i = 0; i < N; ++i){
        for(j = 0; j < M; ++j)
            printf("%d ", m[i][j]);
        putchar('\n');
    }
    return 0;
}
 
//сортировка строк матрицы по указанному столбцу
void sort_matrix(int m[][M], int col){
    m_qsort(m, 0, N - 1, col);
}
 
//быстрая сортировка    
static void m_qsort(int m[][M], int l, int r, int col){
    int t, k, p, i = l, j = r;  
    if(l >= r)
        return;
    
    p = m[l + (r - l) / 2][col];
    while(i <= j){
        while(m[i][col] < p)
            ++i;
        while(m[j][col] > p)
            --j;
 
        if(i <= j){
            for(k = 0; k < M; ++k){
                t       = m[i][k];
                m[i][k] = m[j][k];
                m[j][k] = t;
            }
            ++i;
            --j;
        }
    }
 
    if(j > l)
        m_qsort(m, l, j, col);
    if(r > i)
        m_qsort(m, i, r, col);
}

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

  1. Включаем необходимые заголовочные файлы и .
  2. Определяем макросы N и M, которые задают размеры матрицы.
  3. Объявляем функцию m_qsort как статическую, которая будет использоваться только внутри данной трансляции.
  4. Определяем функцию sort_matrix, которая будет вызывать функцию m_qsort для сортировки матрицы по указанному столбцу.
  5. Создаем массив m[N][M] и инициализируем его случайными значениями с помощью функции rand() % 10.
  6. Выводим исходную матрицу на экран.
  7. Вызываем функцию sort_matrix, передавая в нее массив m и номер столбца M-1 для сортировки по последнему столбцу.
  8. Выводим отсортированную матрицу на экран.
  9. Возвращаем 0, чтобы указать, что программа успешно завершилась.
  10. Определяем функцию m_qsort, которая реализует алгоритм быстрой сортировки для сортировки строк матрицы по указанному столбцу.
  11. Рекурсивно вызываем функцию m_qsort для сортировки подмассивов, если длина подмассива меньше или равна 1.
  12. Вычисляем опорный элемент p, как значение элемента из среднего подмассива.
  13. Используем цикл while для определения индексов i и j, которые делят массив на две части относительно опорного элемента p.
  14. Используем цикл while для перебора элементов в левой и правой частях матрицы и обмена их местами, если они находятся не на своих местах относительно опорного элемента p.
  15. Если i <= j, то выполняем обмен значениями элементов в текущих позициях i и j.
  16. Если i <= j, то выполняем рекурсивный вызов функции m_qsort для сортировки левой и правой частей матрицы.
  17. Если j > l, то выполняем рекурсивный вызов функции m_qsort для сортировки левой части матрицы.
  18. Если r > i, то выполняем рекурсивный вызов функции m_qsort для сортировки правой части матрицы.

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


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

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

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