Значение типа "int *" нельзя присвоить сущности типа "int"
У меня есть двумерный динамический массив. Массив заполняю ГПСЧ. Нужно пузырьком отсортировать элементы. Написал цикл, в котором должно происходить это. Но столкнулся с некоторой проблемой. В самом цикле, если сортировку делать так, как это пытаюсь сделать я, то возникает проблема: matrix[i][j], а у меня в сортировке matrix[j]. От этого получаю ошибки, которые ниже. Как это можно исправить?
Ошибки:
50 строка) значение типа "int *" нельзя присвоить сущности типа "int"
52 строка) значение типа "int" нельзя присвоить сущности типа "int *"
Код:
#include <iostream>
#include <ctime>
#include <stdlib.h>
using namespace std;
void Border();
int main() {
setlocale(0, "");
srand(unsigned(time(NULL)));
Border();
int N, M, predV, predN, temp;
cout << " Введите размер матрицы. \n\n";
cout << " Введите количество строк > ";
cin >> N;
cout << " Введите количество рядов > ";
cin >> M;
cout << " Введите целое число максимального предела генерации > ";
cin >> predV;
cout << " Введите целое число минимального предела генерации > ";
cin >> predN;
Border();
cout << endl;
int** matrix = new int* [N];
for (int i = 0; i < N; i++)
matrix[i] = new int[M];
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
matrix[i][j] = rand() % predV + predN; // формула генерации от нижнего предела до верхнего]
Border();
cout << "Вывод матрицы. " << endl << endl;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
cout << matrix[i][j] << "\t";
cout << endl;
}
Border();
// сортировка пузырьком по возрастанию
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < M - i - 1; j++) {
if (matrix[j] > matrix[j + 1]) {
// меняю элементы местами
temp = matrix[j];
matrix[j] = matrix[j + 1];
matrix[j + 1] = temp;
}
}
}
Border();
cout << "Вывод отсортированной матрицы. " << endl << endl;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
cout << matrix[i][j] << "\t";
cout << endl;
}
Border();
cout << endl;
for (int i = 0; i < N; i++)
delete[] matrix[i];
delete[] matrix;
return 0;
}
void Border()
{
for (size_t i = 0; i < 100; i++)
{
cout << "=";
}
cout << endl;
}
Ответы (2 шт):
Полностью изменил логику. Теперь сортировка происходит аналогично сортировке одномерного массива.
Перебор элементов происходит по очереди, начиная с matrix[0][1]. Затем в двойном вложенном цикле вывожу двухмерный массив (типа вывожу). Сравниваю с предыдущим.
i=inext, j=jnext. В роли индекса предыдущего - значение, которое зафиксировано на предыдущей итерации цикла.
int inext, jnext;
int i, j;
int temp;
bool sorted = false;
while (!sorted) {
sorted = true;
i = 0; j = 0;
for (inext = 0; inext < N; inext++)
for (jnext = (inext ? 0 : 1); jnext < M; jnext++)
{
if (matrix[i][j] > matrix[inext][jnext]) {
temp = matrix[i][j];
matrix[i][j] = matrix[inext][jnext];
matrix[inext][jnext] = temp;
sorted = false;
}
i = inext;
j = jnext;
}
}
temp = matrix[j];
int *temp = matrix[j];
А ещё вот тут ошибка:
matrix[i][j] = rand() % predV + predN;
matrix[i][j] = rand() % (predV - predN) + predN;