Pagini recente » Cod sursa (job #3263450) | Cod sursa (job #1026666) | Cod sursa (job #1393627) | Cod sursa (job #1048386) | Cod sursa (job #284597)
Cod sursa(job #284597)
#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;
}