Cod sursa(job #1067621)

Utilizator acomAndrei Comaneci acom Data 27 decembrie 2013 10:43:42
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<cstdio>
using namespace std;
#define NMAX 500005
int n,k,a[NMAX],v[NMAX];
void inter(int st, int mj, int dr)
{
    int i,j;
    for (i=st,j=mj+1,k=st-1;i<=mj && j<=dr;)
        if (a[i]<a[j])
            v[++k]=a[i++];
        else
            v[++k]=a[j++];
    for (;i<=mj;++i)
        v[++k]=a[i];
    for (;j<=dr;++j)
        v[++k]=a[j];
    for (i=st;i<=dr;++i)
        a[i]=v[i];
}
void msort(int st, int dr)
{
    if (st<dr)
    {
        int mj=(st+dr)/2;
        msort(st,mj);
        msort(mj+1,dr);
        inter(st,mj,dr);
    }
}
int main()
{
    int i;
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;++i)
        scanf("%d",&a[i]);
    msort(1,n);
    for (i=1;i<=n;++i)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}