Cod sursa(job #642673)

Utilizator evodaniVasile Daniel evodani Data 1 decembrie 2011 21:11:34
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
long int v[500005], n;
//quicksort
void citeste () {
	long int e;
	fin>>n; for (e=1; e<=n; e++) fin>>v[e];
}

void schimba (long int *a, long int *b) {
	long int aux; 
	aux=*a; 
	*a=*b;
	*b=aux;
}

void sorteaza (long int v[], long int start, long int final) {
	long int i, j, pivot, ales;
	if (start<final) {
		pivot=start+(final-start)/2;
		schimba (&v[start], &v[pivot]);
		ales=v[start];
		i=start+1;
		j=final;
		while (i<=j) {
			while ( (i<=final) && (v[i]<=ales) ) i++;
			while ( (j>=start) && (v[j]>ales) ) j--;
			if (i<j) schimba (&v[i], &v[j]);
		}
		schimba (&v[start], &v[j]);
		sorteaza (v, start, j-1);
		sorteaza (v, j+1, final);
	}
}

void afiseaza () {
	long int e; for (e=1; e<=n; e++) fout<<v[e]<<' ';
	fout<<'\n';
}

int main () {
	citeste (); 
	sorteaza (v, 1, n);
	afiseaza ();
	fout.close ();
	return 0;
}