Сортировка двумерного динамического массива по строкам 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;
}