Pagini recente » Cod sursa (job #1996837) | Cod sursa (job #3275855) | Cod sursa (job #3174176) | Cod sursa (job #472588) | Cod sursa (job #3259325)
#include <stdio.h>
#define NMAX 500001
int a[NMAX], aux[NMAX];
void mergesort(int right, int left) {
if (right >= left)
return;
int mid = (right + left) / 2;
mergesort(right, mid);
mergesort(mid + 1, left);
int i = right, j = mid + 1, current = right - 1;
for(; i<=mid || j<=left; ) {
++current;
if (i > mid) {
aux[current] = a[j];
++j;
continue;
}
if(j > left) {
aux[current] = a[i];
++i;
continue;
}
if (a[i] < a[j]) {
aux[current] = a[i];
++i;
} else {
aux[current] = a[j];
++j;
}
}
for(i = right; i <= left; ++i)
a[i] = aux[i];
}
void main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int n;
scanf("%d", &n);
for(int i=1; i<=n; ++i)
scanf("%d", &a[i]);
mergesort(1, n);
for(int i=1; i<=n; ++i)
printf("%d ", a[i]);
}