С++ отсортировать двумерный массив по столбцам как указано на картинке
Дан двумерный массив [N]x[M]
Не могу отсортировать по шаблону(смог сделать простую сортировку по столбцам)
for (int i = 0; i <= (n * m); i++) {
for (int ryad = 0; ryad < n-1; ryad++) {
for (int stolb = 0; stolb < m - 1; stolb++) {
if (matrix[ryad][stolb] > matrix[ryad + 1][stolb]) {
temp = matrix[ryad][stolb];
matrix[ryad][stolb] = matrix[ryad + 1][stolb];
matrix[ryad + 1][stolb] = temp;
}
}
}
}
Пытался сделать вот так:
for (int i = 0; i <= (n * m); i++) {
for (int ryad = 0; ryad < n-c; ryad++) {
for (int stolb = 0; stolb < m - p; stolb++) {
if (matrix[ryad][stolb] > matrix[ryad + 1][stolb]) {
temp = matrix[ryad][stolb];
matrix[ryad][stolb] = matrix[ryad + 1][stolb];
matrix[ryad + 1][stolb] = temp;
}
}
p++;
c++;
}
}
Ответы (2 шт):
Автор решения: MBo
→ Ссылка
Для квадратного массива NxN сортировка указанного квадранта (про другие квадранты и неквадратный массив чётко задача не поставлена):
for (int col = 0; i < n / 2; col++) {
for (int i = col + 1; i < n - col - 2; i++) {
for (int j = n - col - 2; j > i; j--) {
if (matrix[j-1][col] > matrix[j][col]) {
обменять их
}
}
}
}
Автор решения: Alex Chili
→ Ссылка
Программа которою мне удалось сделать к этому заданию:
#include <iostream>
using namespace std;
int main() {
setlocale(LC_ALL, "Rus");
int n, m;
//создаем массив
cout << "Розмiр: ";
cin >> n;
m = n;
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() % 30;
}
}
//выводим массив
cout << "матриця: " << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
cout << endl;
//алгоритм сортировки
int temp;
for (int col = 0; col < n / 2; col++) {
for (int i = col + 1; i < n - col - 2; i++) {
for (int j = n - col - 2; j > i; j--) {
if (matrix[j - 1][col] > matrix[j][col]) {
temp = matrix[j-1][col];
matrix[j-1][col] = matrix[j][col];
matrix[j][col] = temp;
}
}
}
}
//вывод отсортерованого массива
cout << "матриця: " << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cout << matrix[i][j] << " ";
cout << endl;
}
return 0;
}
