Cod sursa(job #803514)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 27 octombrie 2012 18:36:10
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 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;
}

int partition (int left, int right)
{
	std::srand(std::time(0));
	int pivot(std::rand() % (right - left + 1));
	pivot += left;
	swap(pivot,right);
	int store(left);
	for (int i(left) ; i < right ; ++i)
		if (v[i] <= v[right])
		{
			swap(i,store);
			++store;
		}
	swap(store,right);
	return store;
}

void quicksort (int left, int right)
{
	if (left < right)
	{
		int pivot(partition(left,right));
		quicksort(left,pivot - 1);
		quicksort(pivot + 1,right);
	}
}

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