Cod sursa(job #261384)

Utilizator raduzerRadu Zernoveanu raduzer Data 18 februarie 2009 10:23:21
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX_N 500010

long n;
long a[MAX_N];

void quick(long st, long dr)
{
	long pivot = a[st + rand() % (dr - st + 1)];
	long i = st, j = dr;
	while (i <= j)
	{
		while (i <= dr && a[i] < pivot) ++i;
		while (j >= st && a[j] >= pivot) --j;

		if (i <= j)
		{
			a[i] ^= a[j] ^= a[i] ^= a[j];
			++i;
			--j;
		}
	}
	if (i < dr) quick(i, dr);
	if (j > st) quick(st, j);
}

int main()
{
	long i;
	srand(time(0));
	freopen("quicksort.in", "r", stdin);
	freopen("quicksort.out", "w", stdout);

	scanf("%ld", &n);
	for (i = 1; i <= n; ++i) scanf("%ld", &a[i]);

	quick(1, n);

	for (i = 1; i <= n; ++i) printf("%ld ", a[i]);

	return 0;
}