Pagini recente » Cod sursa (job #2815390) | Cod sursa (job #1519865) | Cod sursa (job #2712626) | Cod sursa (job #2746304) | Cod sursa (job #674033)
Cod sursa(job #674033)
#include <stdio.h>
#include <string.h>
int a[500000];
int aux[500000];
void merge(int i1, int i2)
{
if (i1 == i2)
return;
int m = (i1 + i2) / 2;
merge(i1, m);
merge(m + 1, i2);
int index1 = i1, index2 = m + 1, index = 0;
while (index1 <= m && index2 <= i2) {
if (a[index1] < a[index2]) {
aux[index++] = a[index1++];
continue;
}
if (a[index2] < a[index1]) {
aux[index++] = a[index2++];
continue;
}
aux[index++] = a[index1++];
aux[index++] = a[index2++];
}
while (index1 <= m)
aux[index++] = a[index1++];
while (index2 <= i2)
aux[index++] = a[index2++];
memcpy(&(a[i1]), aux, index * sizeof(int));
}
int main()
{
int n;
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 - 1);
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}