Отсортировать диагонали, параллельные побочной по возрастанию

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
gjnnfglkf
Сообщения: 4
Зарегистрирован: 13 апр 2017, 14:02

16 апр 2017, 13:02

В файле содержится двумерный массив размерностью n на n. В новый файл вывести отсортированный массив.
Отсортировать диагонали, параллельные побочной по возрастанию с помощью сортировки вставками.

Вот код,нужно сделать чтобы сортировались диагонали параллельные побочной, а не главной. помогите пожалуйста.

Код: Выделить всё

#include <fstream>
#include <iomanip>
#include <iostream>
 
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
void sort(int *a, int n)
{
    int temp;
    int i, j;
    for (i = 1; i < n; i++)
    {
        j = i;
        while (j > 0 && a[j] < a[j - 1])
        {
            temp = a[j];
            a[j] = a[j - 1];
            a[j - 1] = temp;
            j--;
        }
    }
}
 
int main()
{
    int n, i, j;
    in >> n;
    int** a = new int*[n];
    for (i = 0; i < n; i++)
    {
        a[i] = new int[n];
        for (int j = 0; j<n; j++)
            in >> a[i][j];
    }
 
    int *diag1;
    diag1 = new int[n + 1];
    for (i = n - 2; i >= 0; i--)
    {
        for (j = 0; j<n - i; j++) diag1[j] = a[j][i + j];
 
        sort(diag1, n - i);
        for (j = 0; j<n - i; j++) a[j][i + j] = diag1[j];
    }
    int *diag2;
    diag2 = new int[n + 1];
    for (i = 1; i<n - 1; i++)
    {
        for (j = i; j <= n - 1; j++) diag2[j] = a[j][j - i];
        sort(diag2, n - i);
        for (j = i; j <= n - 1; j++) a[j][j - i] = diag2[j];
    }
    {
        out << n << endl;
        for (int i = 0; i<n; i++, out << endl)
            for (j = 0; j<n; j++)
                out << setw(5) << left << a[i][j];
 
 
    }
    in.close();
    out.close();
    for (int i = 0; i < n; ++i)
        delete[] a[i];
    delete[] a;
    return 0;
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить