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