Cod sursa(job #1202076)

Utilizator catalinrebegeaUNIBUC-Claudia Catarig catalinrebegea Data 26 iunie 2014 20:00:12
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#define Nmax 500005

using namespace std;

int N,a[Nmax],aux[Nmax];

inline void Merge(int st, int mij, int dr)
{
    int i=st,j=mij+1;
    aux[0]=0;
    while(i<=mij && j<=dr)
    {
        if(a[i]<=a[j])
            aux[++aux[0]]=a[i++];
        else
            aux[++aux[0]]=a[j++];
    }
    for(;i<=mij;++i)
        aux[++aux[0]]=a[i];
    for(;j<=dr;++j)
        aux[++aux[0]]=a[j];
    for(i=st;i<=dr;++i)
        a[i]=aux[i-st+1];
}

inline void MergeSort(int st, int dr)
{
    if(st==dr)
        return;
    int mij=(st+dr)/2;
    MergeSort(st,mij); MergeSort(mij+1,dr);
    Merge(st,mij,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]);
    MergeSort(1,N);
    for(i=1;i<=N;++i)
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}