Pagini recente » Cod sursa (job #1408356) | Cod sursa (job #2590898) | Cod sursa (job #2741886) | Cod sursa (job #1545001) | Cod sursa (job #2509639)
#include <stdio.h>
#include <algorithm>
#define MAXN 65
using namespace std;
void merge( int *a, int *b, int *c, int m, int n)
{
int idx1=1, idx2=1, idx=1;
while(idx1<=m || idx2<=n)
{
if(idx1>m)
c[idx++]=b[idx2++];
else if ( idx2>n)
c[idx++]=a[idx1++];
else
{
if(a[idx1]>b[idx2])
c[idx++]=b[idx2++];
else
c[idx++]=a[idx1++];
}
}
}
void mergesort( int *v, int *aux, int a, int b)
{
if(a==b)
return;
int mij=(a+b)/2;
int l1=mij-a+1, l2=b-mij;
mergesort(v, aux, a, mij);
mergesort(v, aux, mij+1, b);
merge(v+a-1, v+mij, aux, l1, l2);
for(int i=1; i<=b-a+1; i++)
v[a+i-1]=aux[i];
}
int main ()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int v[500001], n, aux[500001];
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d", &v[i]);
mergesort(v, aux, 1, n);
for(int i=1; i<=n; i++)
printf("%d ", v[i]);
return 0;
}