#include <cstdlib>
#include <iostream>
#include <windows.h> 
#include <functional>
using namespace std;

 
struct Worker{
	char name[20];
	int age;
	int exp;
}; 


void Input(Worker* arrWithDigits[], int size ){
	
	for (int i = 0; i < size; i++){
		for (int j = 0; j < size; j++){
			cout << "Фамилия: ";
			cin.getline(arrWithDigits[i][j].name, 20);
			cout << "Год рождения: ";
			cin >> arrWithDigits[i][j].age;
			cout << "Опыт работы: ";
			cin >> arrWithDigits[i][j].exp;
			cin.get(); 
		}
	}
	
}

void SortShell(Worker* arrWithDigits[], int size)		

// Вот эта функция - полная хуйня
// Сортирует НЕПРАВИЛЬНО, во-первых сортирует не столбцы, а строки, во-вторых пропускает первую строку
// ну и в третьих - swap НЕ РАБОТАЕТ. С чем это связанно понимаю: менять нужно полностью структуры
// то что написано тут меняет только года рождения, в этом и косяк. 
// Отсортировать столбцы никак у меня не выходит, чтобы я не делал, все хуйня, а поменять структуры местами
// тем более. вот и прошу у тебя помощи, знающий анон.


  {
    for (int gap = size/2; gap>0; gap/=2)
      for (int i=gap; i<size; i++)
        for (int j=i-gap; j>=0 && arrWithDigits[i][j].age > arrWithDigits[i][j+gap].age; j-=gap)
          swap(arrWithDigits[i][j].age, arrWithDigits[i][j+gap].age);
  }




void Output(Worker* arrWithDigits[], int size){
	
	for (int i = 0; i < size; i++){
		for (int j = 0; j < size; j++){
			cout << arrWithDigits[i][j].name << ", "<< arrWithDigits[i][j].age << ", "<< arrWithDigits[i][j].exp << '\t'<<" | ";
		}
		cout << endl;
	}
	cout << endl << endl;
}


int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	int size;

	cout << "Введите размер матрицы: ";	
	cin >> size;
	cin.get(); 

	Worker** arrWithDigits = new Worker* [size];
	for (int i = 0; i < size; i++){
		arrWithDigits[i] = new Worker[size];
	}

	cout << endl << endl;
	cout << "Введите данные о " << size*size << " сотрудниках" << endl;
	Input(arrWithDigits, size);

	system("cls");
	cout << "Матрица (Фамилия, год рождения, стаж работы)" << endl;
	Output(arrWithDigits, size);

	cout << "Матрица (Фамилия, год рождения, стаж работы)" << endl;
	SortShell(arrWithDigits, size);
	Output(arrWithDigits, size);	
			
	return 0;
}