Упорядочить строки матрицы в порядке возрастания их последних элементов - 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);
- }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
и . - Определяем макросы N и M, которые задают размеры матрицы.
- Объявляем функцию m_qsort как статическую, которая будет использоваться только внутри данной трансляции.
- Определяем функцию sort_matrix, которая будет вызывать функцию m_qsort для сортировки матрицы по указанному столбцу.
- Создаем массив m[N][M] и инициализируем его случайными значениями с помощью функции rand() % 10.
- Выводим исходную матрицу на экран.
- Вызываем функцию sort_matrix, передавая в нее массив m и номер столбца M-1 для сортировки по последнему столбцу.
- Выводим отсортированную матрицу на экран.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.
- Определяем функцию m_qsort, которая реализует алгоритм быстрой сортировки для сортировки строк матрицы по указанному столбцу.
- Рекурсивно вызываем функцию m_qsort для сортировки подмассивов, если длина подмассива меньше или равна 1.
- Вычисляем опорный элемент p, как значение элемента из среднего подмассива.
- Используем цикл while для определения индексов i и j, которые делят массив на две части относительно опорного элемента p.
- Используем цикл while для перебора элементов в левой и правой частях матрицы и обмена их местами, если они находятся не на своих местах относительно опорного элемента p.
- Если i <= j, то выполняем обмен значениями элементов в текущих позициях i и j.
- Если i <= j, то выполняем рекурсивный вызов функции m_qsort для сортировки левой и правой частей матрицы.
- Если j > l, то выполняем рекурсивный вызов функции m_qsort для сортировки левой части матрицы.
- Если r > i, то выполняем рекурсивный вызов функции m_qsort для сортировки правой части матрицы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д