Cod sursa(job #592004)

Utilizator blasterzMircea Dima blasterz Data 26 mai 2011 12:24:19
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>
#define N 500001

int a[N];
int x[N];
int n;

void merge (int a[], int l, int r)
{
	int m = (l + r) / 2;
	int i, j, k = l - 1;
	for (i = l, j = m + 1; i <= m && j <= r;)
		if (a[i] < a[j])
			x[++k] = a[i++];
		else
			x[++k] = a[j++];
	for (; i <= m; ++i)
		x[++k] = a[i];
	for (; j <= r; ++j)
		x[++k] = a[j];
	for (i = l; i <= r; ++i)
		a[i] = x[i];
}

void mergeSort (int a[], int l, int r)
{
	if (l >= r)
		return;
	int m = (l + r) / 2;
	mergeSort (a, l, m);
	mergeSort (a, m + 1, r);
	merge (a, l, r);
}

int main ()
{
	int i;
	freopen ("algsort.in", "r", stdin);
	freopen ("algsort.out", "w", stdout);
	scanf ("%d\n", &n);
	for (i = 1; i <= n; ++i)
		scanf ("%d ", &a[i]);
	mergeSort (a, 1, n);
	for (i = 1; i <= n; ++i)
		printf ("%d ", a[i]);
	return 0;
}