Отсортировать пузырьком двумерный динамический массив
изучаю c++ недавно и в руки попала задача. Задать матрицу n порядка и отсортировать ее пузырьком. После создания и заполнения случайными числами идет сортировка и в этот момент консоль останавливает работу с кодом -1073741819. Буду очень благодарен любой помощи.
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
cout << "Введите размер матрицы: ";
int n;
cin >> n;
int m = n;
srand(time(NULL));
int **arr = new int*[m];// динамический массив с случайными числами
for (int i = 0; i < m; i++) arr[i] = new int[n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = rand() % 110;
}
}
cout << "Матрица:" << endl;//вывод матрицы
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
int temp; // Сортировка
for (int k = 0; k < m * n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - 1; j++) {
if (arr[k][j] > arr[k][j + 1]) {
temp = arr[k][j];
arr[k][j] = arr[k][j + 1];
arr[k][j + 1] = temp;
}
}
}
}
cout << "Матрица после сортировки:" << endl;//вывод матрицы
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
for (int i(0); i < m; i++) delete arr[i];//удаление динамического массива из оперативной памяти
delete [] arr;
return 0;
} ```
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Итак, создаем матрицу...
int **arr = new int*[m];
for (int i = 0; i < m; i++) arr[i] = new int[n];
Размером m*n. По сути n*n. С первой размерностью n.
И как мы с ней работаем?
for (int k = 0; k < m * n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - 1; j++) {
if (arr[k][j] > arr[k][j + 1]) {
Т.е. обращаемся, например, к элементу arr[m*n-1][j]. Но первая размерность, как уже сказано, равна n. И если только n не равно 1, то получается выход за пределы массива. И очень далекий выход :)
Результат очевиден...