Cod sursa(job #1745038)

Utilizator mouse_wirelessMouse Wireless mouse_wireless Data 21 august 2016 00:16:17
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#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;
}