Cod sursa(job #1347262)

Utilizator andreeadimaDima Andreea andreeadima Data 18 februarie 2015 21:15:14
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
/*
	qsort - O(n log n) , worst case n*n
	qsort ( st, dr) {
		if st == dr
			return
	 alegi pivot random din interval
	 elem din stanga vor fi < pivot
	 elem din dreapta > pivot
	 apel pt (st, "mij") si ("mij" + 1 ,  dr)

*/
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n, v[500005];

void qsort (int st, int dr)
{
	if (st >= dr)
		return;
	int i, j, pivot = st + rand() % (dr - st + 1);
	pivot = v[pivot];
	i = st;
	j = dr;
	while ( i <= j ) {
	while ( i <= dr && v[i] < pivot)
		i++;
	while ( j >= st && v[j] > pivot)
		j--;

	if (i <= j) {
		int aux = v[i];
		v[i] = v[j];
		v[j] = aux;
		i++;
		j--;
		}
	}
	qsort (st,j);
	qsort (i,dr);
}
int main()
{
	int i;
	srand(time(NULL));
	fin>>n;
	for (i = 0; i < n; i++)
		fin>>v[i];
    fin.close();
	qsort(0,n-1);
	for (i = 0; i < n; i++)
		fout<<v[i]<<" ";
	fout<<'\n';
	fout.close();
	return 0;
}