Cod sursa(job #801884)

Utilizator savimSerban Andrei Stan savim Data 25 octombrie 2012 12:53:04
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>

const int MAX_N = 500010;

int N, K;

int A[MAX_N], aux[MAX_N];

void interclasare(int p, int q) {
    int mij = (p + q) / 2;

    int x = p, y = mij + 1;

    K = p - 1;
    while (x <= mij && y <= q) {
        if (A[x] <= A[y]) {
            aux[++K] = A[x];
            x++;
        }
        else {
            aux[++K] = A[y];
            y++;
        }
    } 

    while (x <= mij)
        aux[++K] = A[x++];
    while (y <= q)
        aux[++K] = A[y++];

    for (int i = p; i <= q; i++)
        A[i] = aux[i];
}

void merge(int st, int dr) {
    if (st == dr)
        return;

    int mij = (st + dr) / 2;
    merge(st, mij);
    merge(mij + 1, dr);

    interclasare(st, dr);
}

int main() {

    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);

    scanf("%d", &N);
    for (int i = 0; i < N; i++)
        scanf("%d", &A[i]);

    merge(0, N - 1);

    for (int i = 0; i < N; i++)
        printf("%d ", A[i]);
    printf("\n");

    return 0;
}