#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <iomanip>
using namespace std;
int **CreateMatrix (int rows, int cols);
void FillMatrix (int **matrix, int rows, int cols);
void OutputMatrix (int **matrix, int rows, int cols);
void SortMatrix (int **matrix, int rows, int cols);
void DellMatrix(int **matrix, int rows);
int main(){
srand(time(NULL));
int rows = 9, cols = 9;
int **matrix = CreateMatrix(rows, cols);
FillMatrix(matrix, rows, cols);
cout << "Цикл до сортування: " << endl;
OutputMatrix(matrix, rows, cols);
cout << endl;
SortMatrix(matrix, rows, cols);
cout << "Цикл після сортування: " << endl;
OutputMatrix(matrix, rows, cols);
DellMatrix(matrix, rows);
system("pause");
return 0;
}
int **CreateMatrix(int rows, int cols){
int **matrix = new int *[rows];
for (int i = 0; i < rows; i++)
{
matrix[i] = new int [cols];
}
return matrix;
}
void FillMatrix(int **matrix, int rows, int cols){
int N = 19;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
matrix[i][j] = N;
}
}
for (int i = rows - 1; i > rows / 2 - 1; i--)
{
for (int k = cols - 1 - i; k < 1 + i; k++)
{
matrix[i][k] = rand() % 100;
}
}
}
void OutputMatrix(int **matrix, int rows, int cols){
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cout << setw(5) << matrix[i][j];
}
cout << endl;
}
}
void SortMatrix (int **matrix, int rows, int cols){ //selection sort
int max, maxi;
for (int k = rows - 1; k > rows / 2 - 1; k--)
{
for (int i = cols - 1 - k; i < 1 + k; i++)
{
max = matrix[k][i];
maxi = i;
for (int j = i + 1; j <= k; j++)
{
if (matrix[k][j] > max)
{
max = matrix[k][j];
maxi = j;
}
}
matrix[k][maxi] = matrix[k][i];
matrix[k][i] = max;
}
}
}
void DellMatrix(int **matrix, int rows){
for (int i = 0; i < rows; i++)
{
delete matrix[i];
}
delete[] matrix;
}
Цикл до сортування:
19 19 19 19 19 19 19 19 19
19 19 19 19 19 19 19 19 19
19 19 19 19 19 19 19 19 19
19 19 19 19 19 19 19 19 19
19 19 19 19 64 19 19 19 19
19 19 19 64 47 94 19 19 19
19 19 59 5 54 70 4 19 19
19 56 21 49 45 17 87 61 19
48 3 5 33 40 70 84 46 68
Цикл після сортування:
19 19 19 19 19 19 19 19 19
19 19 19 19 19 19 19 19 19
19 19 19 19 19 19 19 19 19
19 19 19 19 19 19 19 19 19
19 19 19 19 64 19 19 19 19
19 19 19 94 64 47 19 19 19
19 19 70 59 54 5 4 19 19
19 87 61 56 49 45 21 17 19
84 70 68 48 46 40 33 5 3
Привет всем, Задача: Элементы в заштрихованной области генерируются случайным образом. Все остальные = Н. Расположите элементы в заштрихованной области в порядке убывания. Я сделал сортировку по строкам, но мне нужно, чтобы все элементы вообще были отсортированы по убыванию, т.е. вверху самые большие элементы, внизу самые маленькие. Не могу понять как переделать, надеюсь на вашу помощь! Спасибо.
@mch, привет, спасибо. Но почему именно 25 int
? Итак, мне нужно преобразовать двумерный массив в одномерный, отсортировать его, а затем снова вернуть в двумерный?
9+7+5+3+1
значения. Просто создайте массив, заполните его случайными числами, отсортируйте и вместо matrix[i][k] = rand() % 100;
сделайте matrix[i][k] = array[index++];
.
@mch, ок, спасибо, попробую. Но я не понимаю, где вы взяли 9+7+5+3+1
, извините xd, объясните, пожалуйста.
@mch, я разместил ответ, в котором воспользовался вашими советами, но он работает некорректно, посмотрите, пожалуйста.
Я бы сделал так:
int NumberOfValues(int cols)
{
int count = 0;
for (int i = cols; i > 0; i -=2)
count += i;
return count;
}
void FillMatrix(int **matrix, int rows, int cols){
int N = 19;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
matrix[i][j] = N;
}
}
std::vector<int> random_numbers(NumberOfValues(cols));
for (auto &i : random_numbers)
i = rand() % 100;
std::sort(begin(random_numbers), end(random_numbers));
int index = 0;
for (int i = rows - 1; i > rows / 2 - 1; i--)
{
for (int k = cols - 1 - i; k < 1 + i; k++)
{
matrix[i][k] = random_numbers[index++];
}
}
}
создайте массив (для этого идеально подходит std::vector
) с правильным количеством значений в пирамиде (для 9 столбцов у вас есть 9 значений в последней строке, 7 над ней, 5 над 7, 3 над 5 и 1 над 3, то есть 9+7+5+3+1), заполните его случайными числами, отсортируйте и затем используйте эти значения вместо случайных чисел.
В своей функции del
вы забыли использовать delete[] matrix[i];
вместо delete matrix[i];
. new[]
нужен delete[]
.
Пример выполнения: https://godbolt.org/z/o34vncYor
Используйте массив
25
int
, заполните случайными значениями, отсортируйте его, а затем заполнитеmatrix
одним за другим из этих значений.