Cod sursa(job #803727)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 28 octombrie 2012 09:53:24
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#define NMAX 500010
int n,k;
int a[NMAX], aux[NMAX];
void schimb(int p, int q)//interschimbare
{
    int mij=(p+q)/2;
    int x=p,y=mij+1;
	k=p-1;
    while (x<=mij&&y<=q)
	{
        if (a[x]<=a[y])
		{
            aux[++k]=a[x];
            x++;
        }
        else
		{
            aux[++k]=a[y];
            y++;
        }
    } 
    while (x<=mij)
        aux[++k]=a[x++];
    while (y<=q)
        aux[++k]=a[y++];
    for (int i=p;i<=q;i++)
        a[i]=aux[i];
}
void merge(int st, int dr)
{
    if (st==dr)
        return;
    int mij=(st+dr)/2;
    merge(st,mij);
    merge(mij+1,dr);
    schimb(st, dr);
}
int main() {

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