Pagini recente » Cod sursa (job #251458) | Cod sursa (job #1511960) | Cod sursa (job #2665061) | Cod sursa (job #1357429) | Cod sursa (job #803726)
Cod sursa(job #803726)
#include <cstdio>
#define NMAX 500010
int n,k;
int a[NMAX], aux[NMAX];
void schimb(int p, int q)//interschimbare
{
int mij=(p+q)/2;
int x=p,y=mij+1;
k=p-1;
while (x<=mij&&y<=q)
{
if (a[x]<=a[y])
{
aux[++k]=a[x];
x++;
}
else
{
aux[++k]=a[y];
y++;
}
}
while (x<=mij)
aux[++k]=a[x++];
while (y<=q)
aux[++k]=a[y++];
for (int i=p;i<=q;++i)
a[i]=aux[i];
}
void merge(int st, int dr)
{
if (st==dr)
return;
int mij=(st+dr)/2;
merge(st,mij);
merge(mij+1,dr);
schimb(st, dr);
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for (int i=0;i<n;++i)
scanf("%d", &a[i]);
merge(0,n);
for (int i=0;i<n;++i)
printf("%d ",a[i]);
printf("\n");
return 0;
}