Pagini recente » Cod sursa (job #612174) | Cod sursa (job #1941209) | Cod sursa (job #883267) | Cod sursa (job #1777714) | Cod sursa (job #856136)
Cod sursa(job #856136)
#include<stdio.h>
using namespace std;
int v[500001], c[500001];
int n;
void inter(int a,int b,int e,int d)
{
int aux;
/*if (a-b==0)
{
if (v[a]>v[b])
{aux=v[a];
v[a]=v[b];
v[b]=aux;
}
else
{*/
int i,j,k;
i=a;j=e; k=0;
while (i<=b && j<=d)
if (v[i]<v[j])
{
k++;
c[k]=v[i];
i++;
}
else
{
k++;
c[k]=v[j];
j++;
}
if (i<=b)
for (int l=i;l<=b;l++)
{k++;
c[k]=v[l];
}
if (j<=d)
for (int l=j;l<=d;l++)
{k++;
c[k]=v[l];
}
for (int l=a;l<=d;l++)
v[l]=c[l-a+1];
}
int merge (int v[],int l,int r)
{
if (l>=r) return 0;
merge (v,l,(l+r)/2);
merge(v,(l+r)/2+1,r);
inter(l,(l+r)/2,(l+r)/2+1,r);
}
void read()
{
int i;
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&v[i]);
}
void write()
{
int i;
for (i=1;i<=n;++i)
printf("%d ",v[i]);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
read();
merge(v,1,n);
write();
}