Cod sursa(job #370883)

Utilizator catalin93Catalin Ionescu catalin93 Data 2 decembrie 2009 18:22:20
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include<stdio.h>
#include<cstdlib>
int n,v[500001];
inline void schimb(int &a, int &b)
{
	int aux;
	aux = b;
	b= a;
	a = aux;
}

int partitie(int st, int dr)
{
	int poz = st,piv,pp=st+rand()%(dr-st+1);
	schimb(v[dr],v[pp]);
	piv=v[dr];
	for(int i = st ; i < dr ; ++i)
		if(v[i] < piv)
			schimb(v[i],v[poz++]);
	schimb(v[poz],v[dr]);	
	return poz;
}
void sort(int st, int dr)
{
	if(st >= dr)
		return ;
	int p = partitie(st,dr);
	sort(st,p-1);
	sort(p+1,dr);
}


int main()

{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);

	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&v[i]);
	sort(1,n);
	for(int i = 1;i<=n;i++)
		printf("%d ",v[i]);
	return 0;
	
}