Cod sursa(job #1048588)

Utilizator GaborGabrielFMI - GabrielG GaborGabriel Data 6 decembrie 2013 02:05:06
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <time.h>
#include <cstdlib>
using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

#define MAXN 500005
int N, K, v[MAXN];

void Swap(int a, int b)
{
	int aux = v[a];
	v[a] = v[b];
	v[b] = aux;
}

int HoarePartition(int left, int right) {
	int pivot = v[left],
		i = left - 1,
		j = right + 1;
	while (1) {
		do { --j; } while (v[j] > pivot);
		do { ++i; } while (v[i] < pivot);
		if (i < j) Swap(i, j);
		else return j;
	}
}

int RandomHoarePartition(int left, int right) {
	int ran = (rand() % (right - left)) + left + 1;
	Swap(ran, left);
	return HoarePartition(left, right);
}

int QSort(int left, int right) {
	if (left == right) return v[left];
	int pivot = RandomHoarePartition(left, right);

	if (left <= pivot) QSort(left, pivot);
	if (pivot < right) QSort(pivot + 1, right);
}

int main()
{
	srand(time(NULL));

	f >> N;
	for (int i = 1; i <= N; ++i)
		f >> v[i];

	QSort(1, N);

	for (int i = 1; i <= N; ++i)
		g << v[i] << ' ';

	return 0;
}