Pagini recente » Cod sursa (job #2152506) | Cod sursa (job #1179079) | Cod sursa (job #1038862) | Cod sursa (job #992031) | Cod sursa (job #282885)
Cod sursa(job #282885)
#include <cstdio>
#define N 500010
#define FIN "algsort.in"
#define FOUT "algsort.out"
int a[N], v[N], n;
void read()
{
freopen(FIN, "r", stdin);
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &v[i]);
}
void mergesort(int x, int y)
{
int m;
if (x == y)
return;
m = (x + y) / 2;
mergesort(x, m);
mergesort(m + 1, y);
int i = x, j = m + 1, k = x - 1;
while (i <= m || j <= y)
{
if (i > m)
a[++k] = v[j++];
else if (j > y)
a[++k] = v[i++];
else
a[++k] = (v[i] < v[j]) ? v[i++] : v[j++];
}
for (i = x; i <= y; ++i)
v[i] = a[i];
}
void write()
{
freopen(FOUT, "w", stdout);
for (int i = 1; i < n; ++i)
printf("%d ", a[i]);
printf("%d\n", a[n]);
}
int main()
{
read();
mergesort(1, n);
write();
}