В чём ошибка? не учитываются одинаковые числа

"Отсортировать матрицу n*n по схеме расположения из Сорт-2 с помощью алгоритма сортировки из Сорт-1. " как добавить аргумент b в fillSnakeMatrix. он не использует аргумент b. насколько я понимаю вместо этого она заполняет матрицу последовательными целыми числами (k++)

#include <iostream>
#include <iomanip>
using namespace std;


//Создание динамической матрицы
void newMatrix(int**& a, int n)
{
    a = new int* [n];
    for (int i = 0; i < n; i++)
        a[i] = new int[n];
}

// Вывод матрицы на консоль
void printMatrix(int** a, int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << setw(4) << a[i][j];
        cout << endl;
    }
}

// Заполнение матрицы случайнми числами
void randomMatrix(int** a, int n)
{
    srand(time(NULL));
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            a[i][j] = 10*rand() % (n * n);
}

// копирование из матрицы в массив
int* mass(int** a, int n)
{
    int* b = new int[n * n];
    int Ai = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            b[Ai] = (a[i][j]);
            Ai++;
        }
        // return b;  // не в том месте - функция заканчивалась после обработки 1 строки матрицы
    }
    return b;
}

// Функция сортирует массив а по неубыванию методом подсчета
void sortArray(int* a, int n)
{
    int* c = new int[n];
    for (int i = 0; i < n; i++) //обнуление счётчиков
        c[i] = 0;
    //Подсчет
    for (int i = 0; i < n - 1; i++)
        for (int j = i + 1; j < n; j++)
            if (a[i] >= a[j])
                c[i]++;
            else
                c[j]++;
    //Расстановка
    int* b = new int[n];
    for (int i = 0; i < n; i++) {
        b[c[i]] = a[i];
    }

    for (int i = 0; i < n; i++) {
        a[i] = b[i];
    }

}



// Фукнция заполняет матрицу по схеме расположения
void fillSnakeMatrix(int** a, int* b, int n)
{
    int k = 0;

    for (int i = n - 1; i >= 0; i--)
    {
        if (i % 2 == 0) {

            for (int j = (n / 2) - 1; j >= 0; j--) {
                a[i][j] = k++;
                
            }

        }

        else
            for (int j = 0; j < n / 2; j++) {
                a[i][j] = k++;
            }
    }

    for (int j = n / 2; j < n; j++)
    {
        if (j % 2 == 0) {
            for (int i = 0; i < n; i++) {
                a[i][j] = k++;
            }

        }

        else
            for (int i = n - 1; i >= 0; i--) {
                a[i][j] = k++;
            }
    }
}




int main()
{
    setlocale(LC_ALL, "Russian");
    int n;
    do {
        cout << "Input n" << endl;
        cin >> n;
    } while (n < 1 || n > 10);

    int** a = new int*[n];

    newMatrix(a, n);

    randomMatrix(a, n);

    cout << "1 Matrix:" << endl;
    printMatrix(a, n);

    int* b = mass(a, n);

    sortArray(b, n*n);

    fillSnakeMatrix(a, b, n);

    cout << "2 Matrix:" << endl;
    printMatrix(a, n);

    system("pause");
    return 0;

}

Ответы (0 шт):