Cod sursa(job #373103)

Utilizator titusuTitus C titusu Data 12 decembrie 2009 17:37:43
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
/*
 * sortare cu quicksort. pentru a preveni cazurile ordonate, luam ca 
 * pivot un element aleator din intervalul st - dr.
 * */
#include <cstdio>
#include <ctime>
#include <cstdlib>
using namespace std;

int a[500010],n;

void read(){
	scanf("%d",&n);
	for(int i=0;i<n;++i)
		scanf("%d",a+i);
}

void write(){
	for(int i=0;i<n;++i)
		printf("%d ", *(a+i));
}

void qs(int st,int dr){
	if(st<dr){
		int i=st,j=dr,d,aux;
		d=random() %(dr-st+1);
		aux=a[st]; a[st] = a[d]; a[d]=aux;
		d=0;
		while(i<j){
			if(a[i]>a[j]){
				aux=a[i], a[i]=a[j], a[j]=aux;
				d=1-d;
			}
			i+=d;
			j-=1-d;
		}
		qs(st,i-1);
		qs(i+1,dr);
	}
}

int main(){
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	srand(time(0));
	read();
	qs(0,n-1);
	write();
	return 0;
}