Cod sursa(job #795660)

Utilizator radustn92Radu Stancu radustn92 Data 9 octombrie 2012 11:30:17
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#define NMAX 500005
int n,A[NMAX],p1,p2,B[NMAX],r;
void sort(int st,int dr)
{
	if (st==dr)
		return ;
	
	int mij=(st+dr)/2;
	sort(st,mij);
	sort(mij+1,dr);
	
	p1=st; p2=mij+1; r=0;
	int i;
	for (i=1; i<=dr-st+1; i++)
	{
		if (p1<=mij && p2<=dr)
		{
			if (A[p1]<A[p2])
				B[++r]=A[p1],p1++;
			else
				B[++r]=A[p2],p2++;
			continue ;
		}
		if (p1<=mij)
			B[++r]=A[p1],p1++;
		if (p2<=dr)
			B[++r]=A[p2],p2++;
	}
	for (i=st; i<=dr; i++)
		A[i]=B[i-st+1];
}
int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	scanf("%d",&n);
	int i;
	for (i=1; i<=n; i++)
		scanf("%d",&A[i]);
	
	sort(1,n);
	for (i=1; i<=n; i++)
		printf("%d ",A[i]);
	printf("\n");
	return 0;
}