Pagini recente » Cod sursa (job #901892) | Cod sursa (job #1983988) | Cod sursa (job #1994190) | Cod sursa (job #2555223) | Cod sursa (job #1745038)
#include <cstdio>
#include <cstring>
int N;
#define MAXN 500010
int a[MAXN], b[MAXN];
inline void swap(int &a, int &b) {
a ^= b;
b ^= a;
a ^= b;
}
void merge(int L, int mid, int R) {
int lindex = L, rindex = mid;
int index = 0;
while (lindex < mid && rindex < R) {
if (a[lindex] <= a[rindex]) {
b[index++] = a[lindex++];
continue;
}
b[index++] = a[rindex++];
}
for (; lindex < mid; ++lindex)
b[index++] = a[lindex];
for (; rindex < R; ++rindex)
b[index++] = a[rindex];
memcpy(a + L, b, index * sizeof(b[0]));
}
void mergesort(int L, int R) {
if (L >= R - 1)
return;
int mid = (L + R) >> 1;
mergesort(L, mid);
mergesort(mid, R);
merge(L, mid, R);
}
int main() {
#ifdef INFOARENA
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
#endif
scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%d", &a[i]);
mergesort(0, N);
for (int i = 0; i < N; i++)
printf("%d ", a[i]);
return 0;
}