Preview:
#include <iostream>
using namespace std;

int main()
{

    int n;
    int m;

    cout << "Введите размерность вашей метрицы: " << endl;

    cin >> n;
    cin >> m;

    int* arr = new int[n * m]; // создание развертки матрицы в виде одномерного массива

    cout << "Введите элементы вашей матрицы: " << endl;

    for (int i = 0; i < n * m; ++i) { // хаполняем элементы массива 
        cin >> arr[i];
    }

    for (int i = 0; i < n * m; i++) { // cортировка массива пузырьковым методом
        for (int j = 0; j < n * m - 1; j++) {
            if (arr[j] > arr[j + 1]) {

                arr[j] += arr[j + 1];
                arr[j + 1] = arr[j] - arr[j + 1];
                arr[j] = arr[j] - arr[j + 1];

            }
        }
    }

    int matrix[20][20];    // создание обычной матрицы которую мы будем заполнять элементами из отсортированного массива
    bool b_matrix[20][20]; // создание bool матрицы 
    for (int i = 0; i < 20; ++i) { // заполняем bool матрицу значениями false
        for (int j = 0; j < 20; ++j) {
            b_matrix[i][j] = false;
        }
    }
    int speed_x = 1; //перемещение по строчке
    int speed_y = 0; // перемещение по столбцу
    int x = 0, y = 0; // координаты элемента
    int turn_counter = 0;

for (int i = 0; i < n * m; ++i) { //проходимся по созданному массиву и заполняем его элементами из нашего одномерного массива
    matrix[x][y] = arr[i];
    b_matrix[x][y] = true;

    if (b_matrix[x + speed_x][y + speed_y] or (0 > speed_x + x or speed_x + x > n - 1) or (0 > speed_y + y or speed_y + y > m - 1)) { // перемещаемся по ячейкам матрицы при этом проверяем условия
        turn_counter += 1;                                                                                                            // если мы выходим за строку или столбец: меняем направление движения  
        switch (turn_counter % 4)                                                                                                     // если у нас при сопоставлении с bool матрицей на элемент true, то мы не       
        {                                                                                                                             // заполняем этот элемент и меняем направление движиения
        case 1:                                                                                                                       // функция switch case указывает как нужно двигаться чтобы заполнять матрицу
        {
            speed_x = 0;
            speed_y = 1;
            break;
        }
        case 2:
        {
            speed_x = -1;
            speed_y = 0;
            break;
        }
        case 3:
        {
            speed_x = 0;
            speed_y = -1;
            break;
        }
        case 0:
        {
            speed_x = 1;
            speed_y = 0;
            break;
        }
        default:
            break;
        }
    }
    x += speed_x; //перемещаемся к следующему элементу
    y += speed_y;

}

for (int i = 0; i < n; ++i) { // вывод матрицы
    for (int j = 0; j < m; ++j) {
        cout << matrix[j][i] << " ";
    }
    cout << endl;
}

return 0;
}
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter