// Matrix.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#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) 
{
	bool flagsort = false;
	do
	{
		flagsort = true;
		for (int i = 0; i < size-1; ++i)
		{
			if (vector[i][y] > vector[i+1][y])
			{
				int t = vector[i][y];

				vector[i][y] = vector[i+1][y];
				vector[i+1][y] = t;

				int j = i;
				while (j > 0 && (vector[j-1][y]) > vector[j][y])
				{
					t = vector[j][y];
					vector[j][y] = vector[j-1][y];
					vector[j-1][y] = t;
					--j;
				}
				flagsort = false;
			}
		}
	}while(flagsort);
}

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;
}
