Сортировка многомерного массива с сохранением порядка

Есть такой код, нужно сделать сортировку методом быстрой сортировки, но проблема в том что если отсортировать массив allUnits[0] (не обращайте внимание на структуру, так нужно по заданию и это не влияет на решение проблемы), то привязка конкретной строки к конкретному столбцу пропадёт, в моём случае строки это года, а столбцы это работники и сам элемент который находится на пересечении столбца и строки это зарплата конкретного работника в конкретный год. Вопрос как можно сделать сортировку чтобы в итоге вывести информацию о годе и работнике в порядке возрастания зарплаты по типу printf("%d работник заработал %d в %d году \n", ?, ?, ?);

Вот задание для полного понимания: "Пусть рассматривается два подразделения, в первом подразделении работает m работников, во втором - m1. Работа каждого подразделения анализируется с n последних лет. Для каждого работника указана заработная плата за соответствующий год (задается с клавиатуры). Необходимо определить, два маленькие заработки за все годы работы обоих подразделений (реализовать с помощью функции). Отсортировать заработную плату работников первого и второго подразделения методом быстрой сортировки (реализовать в виде функции)."

#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <stdio.h>
#include <math.h>

struct unit {
    int** yearIncome, minIncome1 = 0, minIncome2 = 0;
};

void minElements(struct unit *arr, int yrs, int wrk) {
int i, j, k;

for (i = 0; i < 2; i++) {
    for (j = 0; j < yrs; j++) {
        for (k = 0; k < wrk; k++) {
            if (arr[i].yearIncome[j][k] > 0 && (arr[i].yearIncome[j][k] < arr[i].minIncome1 || arr[i].minIncome1 == 0))
            {
                arr[i].minIncome2 = arr[i].minIncome1;
                arr[i].minIncome1 = arr[i].yearIncome[j][k];
            }
            if (arr[i].yearIncome[j][k] > arr[i].minIncome1 && (arr[i].yearIncome[j][k] < arr[i].minIncome2 || arr[i].minIncome2 == 0))
            {
                arr[i].minIncome2 = arr[i].yearIncome[j][k];
            }
        }
    }
}

for (i = 0; i < 2; i++)
{
    printf("minIncome1 = %d \n", arr[i].minIncome1);
    printf("minIncome2 = %d \n", arr[i].minIncome2);
}
}

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

int i, j, k, years, workers;

struct unit allUnits[2];

printf("Введите кол-во лет и работников: \n");
scanf("%d %d", &years, &workers);

for (i = 0; i < 2; i++) {
    allUnits[i].yearIncome = (int**)malloc(years * sizeof(int*)); // Выделение памяти под указатели на строки
}

for (i = 0; i < 2; i++) {
    printf("Для %d подраздела:\n", i + 1);
    for (j = 0; j < years; j++) {
        allUnits[i].yearIncome[j] = (int*)malloc(workers * sizeof(int)); // Выделение памяти под хранение строк

        for (k = 0; k < workers; k++) {
            int income;

            printf("Введите зарплату %d работника за %d год:\n", k + 1, j + 1);
            scanf("%d", &income);
            printf("\n");

            allUnits[i].yearIncome[j][k] = income;
        }
    }
}

printf("\n\n");

for (i = 0; i < 2; i++) {
    printf("У %d подраздела:\n", i + 1);
    for (j = 0; j < years; j++) {
        for (k = 0; k < workers; k++) {
            printf("Зарплата %d работника за %d год: %d\n", k + 1, j + 1, allUnits[i].yearIncome[j][k]);
        }
    }
}

minElements(allUnits, years, workers);

return 0;

}


Ответы (0 шт):