Cod sursa(job #2391234)

Utilizator PletoPletosu Cosmin-Andrei Pleto Data 28 martie 2019 18:44:51
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
#define NMAX 500001

using namespace std;

ifstream fin("file.in");
ofstream fout("file.out");

int N, V[NMAX];

void interclasare(int *A, int st, int m, int dr) {
    int i = st, j = m + 1, k = 0;
    int *B = new int[NMAX];

    while (i <= m and j <= dr) {
        if (A[i] < A[j]) {
            B[++k] = A[i++];
        } else {
            B[++k] = A[j++];
        }
    }
    while (i <= m) {
        B[++k] = A[i++];
    }
    while (j <= dr) {
        B[++k] = A[j++];
    }

    for (int i = st; i <= dr; ++i) {
        A[i] = B[i - st + 1];
    }

    delete B;
}

void merge_sort(int *A, int st, int dr) {
    if (st < dr) {
        int m = (st + dr ) / 2;
        merge_sort(A, st, m);
        merge_sort(A, m + 1, dr);
        interclasare(A, st, m, dr);
    }
}

int main() {
    fin >> N;
    for (int i = 1; i <= N; ++i) {
        fin >> V[i];
    }
    merge_sort(V, 1, N);
    for (int i = 1; i <= N; ++i) {
        fout << V[i] << ' ';
    }
    fout << '\n';
    fin.close();
    fout.close();
    return 0;
}