Сортировка динамического массива (двумерного / одномерного)

Всех приветствую! Недавно начал изучать C++ для дальнейшего применения в UE Есть задача, никак не могу разобраться с сортировкой.

Общий смысл: программа принимает количество игроков, создается двумерный динамический массив. После произвольно заполняем имя и число условных очков в соответствии с ранее заданным количеством игроков.

Получаем на выходе промежуточно список игроков и количество их очков.

После чего нужно получить список игроков отсортированный по убыванию очков.

На этом моих знаний перестало хватать. Пробовал использовать метод сортировки и на этом завис. Не могу разобраться как грамотно вызвать эту функцию. И что-то мне подсказывает что саму функцию я адаптировал неправильно Прошу помочь с решением)) По возможности с комментариями для понимания процесса))

#include <string>
 
using namespace std;
 
void insertionSort(int rows[], int cols) // Функция сортировки
{
    for (int i{}; i < rows; i++)
    {
        for (int j{}; j < cols; j++)
        {
            int j = i - 1;
            while (j >= 0 && rows[j] > rows[j + 1])
            {
                swap(rows[j], rows[j + 1]);
                cout << "Сортировка...";
                j--;
            }
        }
    }
}
 
int main()
{
    setlocale(0, ""); // русская локализация консоли
 
    int rows; //кол-во рядов (строк) массива
    int cols = 2; //кол-во столбцов массива
 
    cout << "Введите количество игроков: ";
    cin >> rows; // получение от пользователя количества игроков (размера массива)
 
    cout << "==============================================" << endl;
 
    cout << "Введите имена " << rows << " игроков: " << endl;
 
    string** dynamic_array = new string*[rows]; // создаем динамический массив (выделение памяти для массива)
 
    for (int i{}; i < rows; i++)// Заполнение массива и вывод значений его элементов
    {
        dynamic_array[i] = new string[cols]{};
    }
 
    // вводим данные
    for (int i{}; i < rows; i++)
    {
        cout << "Введите имя и очки игрока " << (i + 1) << " через пробел:" << endl;
        // вводим данные для столбцов i-й строки
        for (int j{}; j < cols; j++)
        {
            cin >> dynamic_array[i][j]; // считываем числа в ячейки массива
        }
    }
 
    cout << "==============================================" << endl;
 
    insertionSort(); //Какие аргументы в скобках?
    
    // вывод данных
    for (int i{}; i < rows; i++)
    {
        // выводим данные для столбцов i-й строки
        for (int j{}; j < cols; j++)
        {
            cout << dynamic_array[i][j] << " ";
        }
        cout << endl;
    }
    
    for (int i = 0; i < rows; i++)
    {
        delete[] dynamic_array[i]; // очистка памяти
    }
 
    delete[] dynamic_array; // удаляем динамический массив
 
    return 0;
}

Функция сортировки просто не срабатывает.

Был второй вариант решения с динамическим массивом структур, но это для меня совсем темный лес.

Так же пробовал вариант одномерного динамического массива, но для такого варианта не придумал как прикрепить имена.

#include <iostream>
#include <string>

using namespace std;

//обозначаем массив структур
struct SPlayerData
{
    string Name;
    int Rate{ 0 };
};

void insertionsort(int *dynamic_array, int plauers) //функция сортировки методом "Сортировка вставками"
{
    for (int i = 1; i < plauers; i++)
    {
        int j = i - 1;
        while (j >= 0 && dynamic_array[j] > dynamic_array[j + 1])
        {
            swap(dynamic_array[j], dynamic_array[j + 1]);
            cout << "Сортировка" << endl;
            j--;
        }
    }

}

int main()
{
    setlocale(0, ""); //русская локализация консоли
    
    // размер массива
    int plauers; 
    cout << "Введите количество игроков : ";
    cin >> plauers; //получение от пользователя количества игроков (размера массива)
    
    //const int plauers = 5;

    cout << "==============================================" << endl;

    //SPlayerData plauer[plauers] = {};
        
    cout << "Введите имена " << plauers << " игроков: " << endl;

    int *dynamic_array = new int[plauers]; //создаем динамический массив (выделение памяти для массива)
    
    //вводим данные
    for (int i = 0; i < plauers; i++)
    {
        // Заполнение массива и вывод значений его элементов
        dynamic_array[i] = i;
        cout << "Введите имя и очки игрока " << (i + 1) << " через пробел:" << endl;
        cin >> dynamic_array[i];
    }
    
    cout << "==============================================" << endl;

    //вывод данных до сортировки
    for (int i = 0; i < plauers; i++)
    {
        // Заполнение массива и вывод значений его элементов
        cout << "Значение " << i << " элемента " << dynamic_array[i] << endl;
    }

    cout << "==============================================" << endl;

    insertionsort(dynamic_array, plauers); //вызов функции сортировки массива
    cout << endl;

    //вывод данных после сортировки
    for (int i = 0; i < plauers; i++)
    {
        // Заполнение массива и вывод значений его элементов
        cout << "Значение " << i << " элемента " << dynamic_array[i] << endl;
    }
    
    delete[] dynamic_array; //удаляем динамический массив
    
    return 0;
}

В общем прошу помощи сделать варианты рабочими.

Отредактировал сортировку в коде, сортировка не работает, полагаю что-то не так с синтаксисом.

#include <string>

using namespace std;

void insertionSort(int dynamic_array[], int rows)
{
    int t, i, j;
    for (i = 1; i < rows; i++)
    {
        t = dynamic_array[i];
        j = i - 1;
        while (j >= 0 && dynamic_array[j] > t)
        {
            dynamic_array[j + 1] = dynamic_array[j];
            j--;
        }
        dynamic_array[j + 1] = t;
    }
}

int main()
{
    setlocale(0, ""); // русская локализация консоли

    int rows; //кол-во рядов (строк) массива
    int cols = 2; //кол-во столбцов массива

    cout << "Введите количество игроков: ";
    cin >> rows; // получение от пользователя количества игроков (размера массива)

    cout << "==============================================" << endl;

    cout << "Введите имена " << rows << " игроков: " << endl;

    string** dynamic_array = new string*[rows]; // создаем динамический массив (выделение памяти для массива)

    for (int i{}; i < rows; i++)// Заполнение массива и вывод значений его элементов
    {
        dynamic_array[i] = new string[cols]{};
    }

    // вводим данные
    for (int i{}; i < rows; i++)
    {
        cout << "Введите имя и очки игрока " << (i + 1) << " через пробел:" << endl;
        // вводим данные для столбцов i-й строки
        for (int j{}; j < cols; j++)
        {
            cin >> dynamic_array[i][j]; // считываем числа в ячейки массива
        }
    }

    cout << "==============================================" << endl;

    void insertionSort(int dynamic_array[], int n); //Какие аргументы в скобках?

    // вывод данных
    for (int i{}; i < rows; i++)
    {
        // выводим данные для столбцов i-й строки
        for (int j{}; j < cols; j++)
        {
            cout << dynamic_array[i][j] << " ";
        }
        cout << endl;
    }

    for (int i = 0; i < rows; i++)
    {
        delete[] dynamic_array[i]; // очистка памяти
    }

    delete[] dynamic_array; // удаляем динамический массив

    return 0;
}```

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

Автор решения: MBo

Сортировка вставками не требует обменов, она сдвигает часть массива, затем вставляет элемент на его окончательное место.

void insertionSort(int A[], int n) {
    int t, i, j;
    for (i = 1; i < n; i++) {
        t = A[i];
        j = i - 1;
        while (j >= 0 && A[j] > t) {
            A[j + 1] = A[j];
            j--;
        }
        A[j + 1] = t;
    }
}
→ Ссылка