#include <cmath>
#include <ctime>
#include <iostream>
 
int** CreateMatrix(int x, int y) 
{
	int** matrix = new int *[x];
	for (int row = 0; row < x; ++row)
		matrix[row] = new int[y];
	return matrix;
}
 
void FillMatrix(int** mtx, int x, int y)
{
	srand(time(nullptr));
	for (int row = 0; row < x; ++row)
	{
		for (int col = 0; col < y; ++col)
		{
			mtx[row][col] = 1 + rand() % 9;
		}
	}
}
 
void PrintMatrix(int** mtx, int x, int y)
{
	for (int row = 0; row < x; ++row)
	{
		for (int col = 0; col < y; ++col)
		{
			std::cout << mtx[row][col] << " ";
		}
		std::cout << std::endl;
	}
}
 
void SortVector(int** vector, int y, int size) 
{
	int i = 0;
	int buf;
	char swap_cnt = 0;
	while (i < size)
	{
		if (i + 1 != size && vector[i][y] > vector[i + 1][y])
		{
			buf = vector[i][y];
			vector[i][y] = vector[i + 1][y];
			vector[i + 1][y] = buf;
			swap_cnt = 1;
		}
		i++;
		if (i == size && swap_cnt == 1)
		{
			swap_cnt = 0;
			i = 0;
		}
	}
}
 
void SortColsMatrix(int** mtx, int x, int y)
{
	for (int col = 0; col < y; ++col)
	{
		SortVector(mtx, col, x);
	}
}
 
void FreeMatrix(int** &mtx, int x, int y)
{
	for (int row = 0; row < x; ++row)
		delete[] mtx[row];
	delete[] mtx;
}
 
int main()
{
	int x = 7;
	int y = 5;
	int** mtx = CreateMatrix(x,y);
	FillMatrix(mtx, x, y);
 
	std::cout << "Unsorted matrix: " << std::endl;
	PrintMatrix(mtx, x, y);
	std::cout << std::endl;
 
	SortColsMatrix(mtx, x, y);
 
	std::cout << "Sorted matrix: "<< std::endl;
	std::cout << std::endl;
	PrintMatrix(mtx, x, y);
 
	FreeMatrix(mtx, x, y);
 
	return 0;
}