Отсортировать матрицу насквозь по столбикам quick sort - C (СИ)
Формулировка задачи:
Здраствуйте нужна помощь!Нужно остортировать матрицу насквозь quick sort
Пример до сортировки:
4 7 2
2 9 0
3 1 5
После:
0 2 5
1 3 7
2 4 9
Есть сортировка для вектора, когда хочу сделать для матрицы сортирует только по 1 столбику а надо всю матрицю насквозь
void SortQuick1x(int L,int R){ int x,temp; int n=5,m=5; int B[n][m]; x=B[(L+R)/2]; int i=L,j=R; while(i<=j){ while(B[i]x) j--; if(i<=j){ temp=B[i]; B[i]=B[j]; B[j]=temp; i++; j--; } } if(L
Решение задачи: «Отсортировать матрицу насквозь по столбикам quick sort»
textual
Листинг программы
#include <stdio.h> #include <math.h> #define n 3 #define m 3 int B[m][n] = { {4, 7, 2}, {2, 9, 0}, {3, 1, 5} }; void SortQuick1x(int L,int R){ int x,temp, midd; midd = (L+R)/2; x=B[midd%m][midd/m]; int i=L,j=R; while(i<=j){ while(B[i%m][i/m]<x) i++; while(B[j%m][j/m]>x) j--; if(i<=j){ temp=B[i%m][i/m]; B[i%m][i/m]=B[j%m][j/m]; B[j%m][j/m]=temp; i++; j--; } } if(L<j) SortQuick1x(L,j); if(i<R) SortQuick1x(i,R); } int main () { int i, j; SortQuick1x(0, m*n - 1); for(i = 0; i < m; i++) { for(j = 0; j < n; j++) printf("%3d", B[i][j]); printf("\n"); } return 0; }
Объяснение кода листинга программы
В этом коде используется алгоритм быстрой сортировки для сортировки матрицы. Вот список действий, которые происходят в коде:
- Включаются необходимые заголовочные файлы.
- Определяются значения для двух констант: n (количество строк в матрице) и m (количество столбцов в матрице).
- Создается матрица B размером m x n и инициализируется значениями.
- Определяется функция SortQuick1x, которая реализует алгоритм быстрой сортировки для одномерного массива.
- В функции main() создаются переменные i и j для использования в цикле.
- Вызывается функция SortQuick1x с аргументами 0 и mn-1, где 0 - это номер первого элемента матрицы, а mn-1 - это номер последнего элемента матрицы.
- В функции main() выводится отсортированная матрица B с помощью двух вложенных циклов.
- Функция main() возвращает 0, что означает успешное завершение программы.