Cod sursa(job #284597)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 21 martie 2009 20:21:12
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<stdio.h>
long v[500001],x[500001];
long n,i;
void merge (long a,long b)
{
long m,i,j,u=0;
if(a>=b)
   return ;

m=(a+b)/2;
merge(a,m);
merge(m+1,b);
i=a;j=m+1;
while(i<=m && j<=b)
{
if(i==-1 && j==-1)
   break;
 else
	if(i==-1)
	{
	v[++u]=x[j];
	  j++;
	}
	else
	   if(j==-1)
	   {
	   v[++u]=x[i];
		i++;
	   }
else
{
 if(x[i]<x[j])
 {
  v[++u]=x[i];
  i++;
  if(i==m+1)
	i=-1;

 }//if
 else
	{
	v[++u]=x[j];
	j++;
	if(j==b+1)
	 j=-1;
	}
}//else mare
}//while
for(i=a;i<=b;i++)
  x[i]=v[i-a+1];
  u=0;
}
int main ()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
  scanf("%ld",&x[i]);
merge(1,n);
for(i=1;i<=n;i++)
   printf("%ld ",x[i]);
return 0;
}