Cod sursa(job #394517)

Utilizator MciprianMMciprianM MciprianM Data 11 februarie 2010 07:38:50
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<iostream>
#include<cstdlib>
#include<algorithm>
using namespace std;
int a[500009];
void swap(int& a, int& b){
	int aux;
	aux=a;a=b;b=aux;
}
int partitie(int st, int dr){
	int p, pos, k, i;
	srand(time(NULL));
	p=((rand()%(dr-st+1))+st);
	k=a[p];	pos=st;
	swap(a[pos], a[p]);
	for(i=st+1;i<=dr;i++)
		if(a[i]<=k)
			swap(a[++pos],a[i]);
	swap(a[pos],a[st]);
	return pos;
}
void quisort(int st, int dr, int l){
	if(l<4&&dr-st>10){
		int m=partitie(st, dr);
		quisort(st, m-1,l+1);
		quisort(m+1, dr,l+1);
	}
	else sort(a+st, a+dr+1);
}
int main(){
	int n, i;
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);
	cin>>n;
	for(i=0;i<n;i++)
		cin>>a[i];
	quisort(0, n-1,0);
	for(i=0;i<n;i++)
		cout<<a[i]<<' ';
	cout<<'\n';
	return 0;
}