Как сделать сортировку по убыванию и привязать фамилии к зарплате

Есть у меня код добавления рабочего и вывод рабочего в табличном варианте, надо сделать сортировку расположив фамилии в порядке убывания зарплаты, определить среднюю зарплату по всем рабочим и подсчитать для каждой бригады количество рабочих, имеющих зарплату ниже средней. Бригады нумеруются подряд, начиная с первой. Я просто начинающий программист и не понимаю, как это правильно реализовать.

Код:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <conio.h>
#include <Windows.h>
using namespace std;

typedef struct brig {
    char surname[20]; // Фамилия
    int nomer ; // Номер бригады
    int zarplata; // зарплата бригадира
} brig;

void add_brig(brig** brigs, int* size, int* capacity) {
    SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
    SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
    setlocale(LC_ALL, "ru");
    printf("Введите фамилию: ");
    scanf("%s", &(*brigs)[*size].surname);
    printf("Введите номер бригады: ");
    scanf("%d", &(*brigs)[*size].nomer);
    printf("Введите заработную плату: ");
    scanf("%d", &(*brigs)[*size].zarplata);

    (*size)++;

    if (*size >= *capacity) {
        *capacity *= 2;

        *brigs = (brig*)realloc(*brigs, *capacity * sizeof(brig));
    }
}

void print_brigs(brig* brigs, int size) {
    setlocale(LC_ALL, "ru");
    printf("+---------------------+--------------------+--------+\n");
    printf("|         Фамилия     |    Номер бригады    | Зарплата |\n");
    printf("+---------------------+--------------------+--------+\n");

    if (size == 0)
        printf("|            No goods was added...          |\n");

    for (int i = 0; i < size; i++)
        printf("| %20s | %17.5d | %9d |\n", brigs[i].surname, brigs[i].nomer, brigs[i].zarplata);

    printf("+---------------------+--------------------+--------+\n");
}


void print_menu() {
    setlocale(LC_ALL, "ru");
    system("cls"); // очищаем экран
    cout << "Выберите пункт" << endl;
    cout << "1. Добавить бригадира" << endl;
    cout << "2. Увидеть всех бригадиров" << endl;
    cout << "5. Exit" << endl;
    cout << ">";
}
int get_variant(int count) {
    int variant;
    string s; // строка для считывания введённых данных
    getline (cin, s); // считываем строку

    // пока ввод некорректен, сообщаем об этом и просим повторить его
    while (sscanf(s.c_str(), "%d", &variant) != 1 || variant < 1 || variant > count) {
        cout << "Incorrect input. Try again: "; // выводим сообщение об ошибке
        getline(cin, s); // считываем строку повторно
    }

    return variant;
}


int main() {
    int variant; // выбранный пункт меню
    int size = 0; // количество элементов массива бригады
    int capacity = 1; // ёмкость массива бригады

    brig* brigs = (brig*)malloc(capacity * sizeof(brig)); // выделяем память под массив бригады

    do {
        print_menu(); // выводим меню на экран

        variant = get_variant(5); // получаем номер выбранного пункта меню

        switch (variant) {
        case 1:
            add_brig(&brigs, &size, &capacity);
            break;

        case 2:
            print_brigs(brigs, size);
            break;
             }
        if (variant != 5)
            system("pause"); // задерживаем выполнение, чтобы пользователь мог увидеть результат выполнения выбранного пункта
    } while (variant != 5);

    return 0;
}

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