Cod sursa(job #828743)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 4 decembrie 2012 12:48:31
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

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

const int N=550000;

int n,v[N];

int generateRand(int left,int right){
	int r1=left+rand()%(right-left+1),r2=left+rand()%(right-left+1),r3=left+rand()%(right-left+1);
	if(r1<=r2 && r3<=r2){
		return r2;
	}
	if(r1<=r3 && r2<=r3){
		return r3;
	}
	return r1;
}

void quickSort(int *v,int left,int right){
	if(left>=right)
		return;
	int randpoz=generateRand(left,right);
	swap(v[randpoz],v[left]);
	int i,j,pivot;
	for(pivot=v[left],i=left+1,j=right;i<j;){
		if(v[i]>=pivot){
			swap(v[i],v[j]);
			--j;
			continue;
		}
		++i;
	}
	if(v[i]>pivot){
		--i;
	}
	swap(v[left],v[i]);
	quickSort(v,left,i-1);
	quickSort(v,i+1,right);
}

int main(){
	int i;
	in>>n;
	for(i=1;i<=n;++i){
		in>>v[i];
	}
	srand(time(NULL));
	quickSort(v,1,n);
	for(i=1;i<=n;++i){
		out<<v[i]<<" ";
	}
}