Cod sursa(job #1018259)

Utilizator morlockRadu Tatomir morlock Data 29 octombrie 2013 09:47:47
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <limits.h>
#define nmax 500005
using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");
long n, v[nmax];

void merge( long p, long q, long r )
{
    long n1 = q-p+1;
    long n2 = r-q;
    long v1[n1+1];
    long v2[n2+1];

    v1[n1+1] = LONG_MAX;
    v2[n2+1] = LONG_MAX;

    for ( long i=1; i<=n1; ++i )
        v1[i] = v[p+i-1];
    for ( long i=1; i<=n2; ++i )
        v2[i] = v[q+i];

    long i=1, j=1;
    for ( long k=p; k<=r; ++k )
        if ( v1[i] <= v2[j] )
            { v[k] = v1[i]; i++; }
        else
            { v[k] = v2[j]; j++; }
}


void merge_sort(long p, long r)
{
    if ( p < r )
    {
        long q = (p+r)/2;
        merge_sort(p, q);
        merge_sort(q+1, r);
        merge(p, q, r);
    }
}

int main()
{
    in >> n;
    for ( long i=1; i<=n; ++i )
        in >> v[i];

    merge_sort(1, n);


    for ( long i=1; i<=n; ++i )
        out << v[i] << " ";

return 0;
}