Cod sursa(job #283064)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 18 martie 2009 17:54:24
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>
#define N 500010
#define FIN "algsort.in"
#define FOUT "algsort.out"

int a[N], v[N], n;

void read()
{
    freopen(FIN, "r", stdin);

    scanf("%d", &n);

    for (int i = 1; i <= n; ++i)
        scanf("%d", &v[i]);
}

void mergesort(int x, int y)
{
    int m;
    if (x == y)
        return;
    m = (x + y) / 2;
    mergesort(x, m);
    mergesort(m + 1, y);
    int i = x, j = m + 1, k = x - 1;
    while (i <= m || j <= y)
    {
        if (i > m)
            a[++k] = v[j++];
        else if (j > y)
            a[++k] = v[i++];
        else
            a[++k] = (v[i] < v[j]) ? v[i++] : v[j++];
    }
    for (i = x; i <= y; ++i)
        v[i] = a[i];
}

void write()
{
    freopen(FOUT, "w", stdout);
    for (int i = 1; i < n; ++i)
        printf("%d ", a[i]);
    printf("%d\n", a[n]);
}

int main()
{
    read();

    mergesort(1, n);

    write();
}