Cod sursa(job #642641)

Utilizator evodaniVasile Daniel evodani Data 1 decembrie 2011 20:37:16
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 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)/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;
}

//sortare prin selectie

/*long int n, v[500005], i, j, mn, pmin;
void citeste () { 
	fin>>n; for (i=1; i<=n; i++) fin>>v[i];
}
void sorteaza () {
	for (i=1; i<n; i++) {
		mn=v[i]; pmin=i;
		for (j=i+1; j<=n; j++) 
			if (v[j]<mn) { mn=v[j]; pmin=j; }
		v[pmin]=v[i];
		v[i]=mn;
		fout<<v[i]<<' ';
	}
	fout<<v[n]<<'\n';
}
int main () {
	citeste (); 
	sorteaza ();
	fout.close ();
	return 0;
}*/