Cod sursa(job #542159)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 25 februarie 2011 21:03:31
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
# include <stdio.h>
long a[500010], n, i, v[500010];
void qs (long a[], long st, long dr){
	long i = st, j = dr, m = a[(st + dr) >> 1];
	do {
		while (a[i] < m) ++i;
		while (a[j] > m) --j;
		if (i <= j){
			int x = a[i];
			a[i] = a[j];
			a[j] = x; 
			++i;
			--j;
		}
	} while (i <= j);
	if (st < j) qs (a, st, j);
	if (i < dr) qs (a, i, dr);
}
void merge (long p, long u){
	long m, i, j, k;
	if (u - p > 0){
		m = (u + p) >> 1;
		merge (p, m);
		merge (m + 1, u);
		for (i = p; i <= m; ++i)
			v[i] = a[i];
		for (j = u; j >= m + 1; --j)
			v[m + 1 + u - j] = a[j];
		i = p;
		j = u;
		for (k = p; k <= u; ++k)
			a[k] = (v[i] < v[j] ? v[i++] : v[j--]);
	}
}
int main (){
	freopen ("algsort.in", "r", stdin);
	freopen ("algsort.out", "w", stdout);
	scanf ("%ld", &n);
	for (i = 1; i <= n; ++i)
		scanf ("%ld", &a[i]);
	merge (1, n);
	for (i = 1; i <= n; ++i)
		printf ("%ld ", a[i]);
	return 0;
}