Cod sursa(job #754014)

Utilizator matei_cChristescu Matei matei_c Data 30 mai 2012 23:12:03
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 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;
}