Cod sursa(job #649960)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 16 decembrie 2011 23:02:45
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <cstdio>

#define NMax 500005

using namespace std;

long N, X[NMax];

void Merge (long V[], long L, long R)
{
    long Aux[NMax], iAux=0;
    long Mid=(L+R)/2, i=L, j=Mid+1;
    for (; i<=Mid and j<=R; )
    {
        if (V[i]<V[j])
        {
            Aux[++iAux]=V[i++];
        }
        else
        {
            Aux[++iAux]=V[j++];
        }
    }
    for (; i<=Mid; ++i)
    {
        Aux[++iAux]=V[i];
    }
    for (; j<=R; ++j)
    {
        Aux[++iAux]=V[j];
    }
    for (i=L; i<=R; ++i)
    {
        V[i]=Aux[i-L+1];
    }
}

void Mergesort (long V[], long L, long R, long Depth)
{
    if (L==R)
    {
        return;
    }
    long Mid=(L+R)/2;
    Mergesort (V, L, Mid, Depth+1);
    Mergesort (V, Mid+1, R, Depth+1);
    Merge (V, L, R);
}

void Read ()
{
    freopen ("algsort.in", "r", stdin);
    scanf ("%ld", &N);
    for (long i=1; i<=N; ++i)
    {
        scanf ("%ld", &X[i]);
    }
}

void Print ()
{
    freopen ("algsort.out", "w", stdout);
    for (long i=1; i<=N; ++i)
    {
        printf ("%d ", X[i]);
    }
}

int main()
{
    Read ();
    Mergesort (X, 1, N, 1);
    Print ();
    return 0;
}