我有一个二维动态数组。我用 PRNG 填充数组。您需要使用气泡对元素进行排序。我写了一个应该发生这种情况的循环。但是我遇到了一些问题。在循环本身中,如果按照我尝试的方式进行排序,则会出现问题: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;
}
这是错误:
彻底改变了逻辑。现在排序类似于对一维数组进行排序。
元素的枚举依次发生,从
matrix[0][1]
. 然后,在一个双嵌套循环中,我输出一个二维数组(就像我输出的一样)。我和上一个比较。i=inext
,j=jnext
. 在前一个索引的作用 - 在循环的前一个迭代中固定的值。