#include <iostream>
using namespace std;
void quicksort(int **mas, int first, int last,int n)
{
	for (int k = 0; k < n; k++)
	{
		int mid, count;
		int f = first, l = last;
		mid = mas[k][(f + l) / 2]; //вычисление опорного элемента
		do
		{
			while (mas[k][f]<mid) f++;
			while (mas[k][l]>mid) l--;
			if (f <= l) //перестановка элементов
			{
				count = mas[k][f];
				mas[k][f] = mas[k][l];
				mas[k][l] = count;
				f++;
				l--;
			}
		} while (f < l);
		if (first < l) quicksort(mas, first, l, n);
		if (f < last) quicksort(mas, f, last, n);
	}
}

void main()
{
	setlocale(0, "rus");
	cout << "Введите количество строк и столбцов" << endl;
	int n, m;
	cin >> n >> m;
	cout << "Введите матрицу" << endl;
	int **matrix = new int *[n];
	for (int i = 0; i < n; i++)
		matrix[i] = new int[m];
	for (int i = 0; i < n; i++)
	for (int j = 0; j < m; j++)
		cin >> matrix[i][j];
	cout << "Неотсортированная матрица" << endl;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
			cout << matrix[i][j]<<'\t';
		cout << endl;
	}
	quicksort(matrix, 0, m, n);
	cout << "Отсортированная матрица" << endl;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
			cout << matrix[i][j] << '\t';
		cout << endl;
	}
	system("pause");
}