Сортировка двумерного динамического массива по строкам c++

Создал динамический массив в c++, заполнил его. Теперь нужно выполнить сортировку по первому элементу строк. Т.Е. Чтобы строка с наибольшим первым элементом оказалась первой. При попытке сделать сортировку, постоянно выдаёт ошибку. Как я понял, переполняется память. Причину я так и не выяснил, прошу помочь.

#include <iostream>
using namespace std;

int main()
{
    int rows =4;
    int cols = 4;
    int** arr = new int* [rows];
    for (int i = 0; i < rows; i++)
    {
        arr[i] = new int[cols];
    }
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            cin >> arr[i][j];
        }
        for (int i = 0; i < rows; i++)
        {
            int j = 0;
                if (arr[i][j] < arr[i + 1][j])
                {
                    arr[i] = arr[i + 1];
                }
        }
    }
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            cout << arr[i][j] << "\t";
        }
        cout << endl;

    }
    for (int i = 0; i < rows; i++)
    {
        delete[] arr[i];
    }
    delete[] arr;

}

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

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

У вас нет никакой сортировки, есть совершенно непонятные телодвижения.
Просто чтоб уже закрыть этот вопрос, держите готовую программу сортировки. У меня она забивает массив случайными числами, чтение с консоли раскомментарьте сами...

#include <iostream>
using namespace std;

void swap_rows(int ** a, int r1, int r2)
{
    int * b = a[r1];
    a[r1] = a[r2];
    a[r2] = b;
}

int main()
{
    int rows = 4;
    int cols = 4;
    int** arr = new int* [rows];

    for (int i = 0; i < rows; i++)
        arr[i] = new int[cols];

    for (int i = 0; i < rows; i++)
        for (int j = 0; j < cols; j++)
            arr[i][j] = rand()%100;

            // cin >> arr[i][j];

    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
            cout << arr[i][j] << "\t";
        cout << endl;
    }


    for(int r = 0; r < rows-1; ++r)
    {
        // Поиск наибольшего в первом столбце
        int m = arr[r][0], idx = r;
        for(int i = r; i < rows; ++i)
            if (arr[i][0] > m) {
                m = arr[i][0];
                idx = i;
            }
        // Обмен
        swap_rows(arr,r,idx);
    }

    cout << endl << endl;

    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
            cout << arr[i][j] << "\t";
        cout << endl;
    }


    for (int i = 0; i < rows; i++)
    {
        delete[] arr[i];
    }

    delete[] arr;
}
→ Ссылка