Упорядочить строки матрицы в порядке возрастания их последних элементов - 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 для сортировки правой части матрицы.