@Melk0or

Как отсортировать матрицу в с++?

Задание. Квадратную матрицу с четной размерностью отсортировать так, чтобы в верхней части находились самые большие числа, а в нижней самые маленькие.

Я вот думал, пройтись по матрице , найти максимальный элемент , пихнуть его в новую матрицу и так заполнять построчно, но в голову совсем ничего не приходит. Помогите...
  • Вопрос задан
  • 536 просмотров
Решения вопроса 1
@Melk0or Автор вопроса
Посидел еще пару часов и вроде решил. Да, немного кака и слипы присутствуют, но это для красоты

#include <iostream>
#include "stdlib.h"
#include <windows.h>

using namespace std;

void InputSelf(int arr[][100], const int n)//функция заполнения массива с входными параметрами: массив и ограничение
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> arr[i][j];//потоковый ввод
        }
    }
}

void InputAuto(int arr[][100], const int n) {
    for (int i = 0; i < n; ++i, cout << endl)
        for (int j = 0; j < n; ++j) {
            arr[i][j] = rand() % 10;

        }
}


void Output(int arr[][100], const int n)//функция вывода массива в консоль
    {
        cout << "Наш массив: \n";
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cout << arr[i][j] << " ";//потоковый вывод
            }
            cout << endl;//переход на следующую строку
        }
    }

void Sort(int arr[][100], const int n)
{
    int i, j, key;
    for (i = 1; i < n * n; ++i) {
        key = arr[i / n][i % n];
        for (j = i - 1; j >= 0; --j) {
            if (key > arr[j / n][j % n])
                arr[(j + 1) / n][(j + 1) % n] = arr[j / n][j % n];
            else break;
        }
        arr[(j + 1) / n][(j + 1) % n] = key;
    }

    cout << "Упорядоченная матрица" << endl;
    for (i = 0; i < n; ++i, cout << endl)
        for (j = 0; j < n; ++j)
            cout << arr[i][j] << ' ';
}


int main()
{
  
    int arr[100][100], n = 0;//объявление массива и его границы
    while(true)
    {
        cout << "Выберите границу матрицы  из числа представленных (2, 4 , 6 или 8): ";;
        cin >> n;
        if(n % 2 == 1 || n > 8 || n < 2)
        {
            cout << "Неверно выбрана граница, повторите ввод!\n";
            cin.clear();
            while (cin.get() != '\n');
            Sleep(300);
            cout << ".";
            Sleep(300);
            cout << ".";
            Sleep(300);
            cout << ".";
            Sleep(500);

        }
        else break;
    }
    int res = 0;
    while(true) {
        cout << "Выберите как заполнить матрицу: " << endl;
        cout << "1 - Самостоятельно ;" << endl;
        cout << "2 - Автоматически" << endl;
        cin >> res;
        if(res > 2 || res < 1)
        {
            cout << "Нужно выбрать число, 1 или 2!\n";
            cin.clear();
            while (cin.get() != '\n');
            Sleep(300);
            cout << ".";
            Sleep(300);
            cout << ".";
            Sleep(300);
            cout << ".";
            Sleep(500);

        }
        else break;
    }

    if (res == 1) {
        InputSelf(arr, n);//инициализация массива
        Output(arr, n);//вывод массива
        Sort(arr, n);//
    }
    else {
        InputAuto(arr, n);//инициализация массива
        Output(arr, n);//вывод массива
        Sort(arr, n);//
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
Берёте любой из данных методов сортировки и сортируете отдельно каждый столбец в матрице. Сортировка по столбцам
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы