Cod sursa(job #1310060)

Utilizator matei_cChristescu Matei matei_c Data 6 ianuarie 2015 13:25:07
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>

const int MAX_N  = 500001 ;

int n;
int v[MAX_N],w[MAX_N];

void MERGE_SORT(int st, int dr)
{
    int m=(st+dr)/2;
    if(st==dr) return;
    MERGE_SORT(st,m);
    MERGE_SORT(m + 1,dr);
    int a=st;
    int b=m+1;
    int c=st;
    while(a<=m && b<=dr)
    {
        if(v[a]<v[b])
        {
            w[c]=v[a];
            ++c;
            ++a;
        }
        else
        {
            w[c]=v[b];
            ++c;
            ++b;
        }
    }
    while(a<=m)
    {
        w[c]=v[a];
        ++c;
        ++a;
    }
    while(b<=dr)
    {
        w[c]=v[b];
        ++c;
        ++b;
    }
    for(int i=st;i<=dr;++i)
        v[i] = w[i];
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        scanf("%d",&v[i]);
    MERGE_SORT(1,n);
    for(int i=1;i<=n;++i)
        printf("%d ",v[i]);
    printf("\n");
    return 0;
}