Cod sursa(job #1238756)

Utilizator fhandreiAndrei Hareza fhandrei Data 7 octombrie 2014 17:45:33
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
// Include
#include <fstream>
#include <algorithm>
#include <cstdlib>
using namespace std;

// Constante
const int sz = 500001;

// Functii
void quickSort(int left, int right);

// Variabile
ifstream in("algsort.in");
ofstream out("algsort.out");

int num;
int values[sz];

// Main
int main()
{
	srand(7712);
	in >> num;
	for(int i=1 ; i<=num ; ++i)
		in >> values[i];
	
	quickSort(1, num);
	
	for(int i=1 ; i<=num ; ++i)
		out << values[i] << ' ';
	out << '\n';
	
	in.close();
	out.close();
	return 0;
}

void quickSort(int left, int right)
{
	int currentLeft = left;
	int currentRight = right;
	int point = values[rand()%(right-left+1) + left];
	
	while(currentLeft <= currentRight)
	{
		while(values[currentLeft] < point)
			++currentLeft;
		while(point < values[currentRight])
			--currentRight;
		
		if(currentLeft <= currentRight)
			swap(values[currentLeft++], values[currentRight--]);
	}
	
	if(left < currentRight)
		quickSort(left, currentRight);
	if(currentLeft < right)
		quickSort(currentLeft, right);
}