Cod sursa(job #803537)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 27 octombrie 2012 19:17:52
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb

#include <cstdio>
#include <ctime>
#include <cstdlib>

const int MAX_SIZE(500000);

int v [MAX_SIZE];
int n;

inline void read (void)
{
	std::freopen("algsort.in","r",stdin);
	std::scanf("%d",&n);
	for (int *iterator(v), *end(v + n) ; iterator < end ; ++iterator)
		std::scanf("%d",iterator);
	std::fclose(stdin);
}

inline void print (void)
{
	std::freopen("algsort.out","w",stdout);
	for (int *iterator(v), *end(iterator + n) ; iterator < end ; ++iterator)
		std::printf("%d ",*iterator);
	std::putchar('\n');
	std::fclose(stdout);
}

void swap (int a, int b)
{
	int temp(v[a]);
	v[a] = v[b];
	v[b] = temp;
}

void quicksort (int left, int right)
{
	int pivot(v[left + (rand() & (right - left + 1))]), i(left), j(right);
	while (i <= j)
	{
		while (v[i] < pivot)
			++i;
		while (v[j] > pivot)
			--j;
		if (i <= j)
		{
			swap(i,j);
			++i;
			--j;
		}
	}
	if (left < j)
		quicksort(left,j);
	if (right > i)
		quicksort(i,right);
}

int main (void)
{
	read();
	std::srand(std::time(0));
	quicksort(0,n - 1);
	print();
	return 0;
}