Cod sursa(job #795805)

Utilizator radustn92Radu Stancu radustn92 Data 9 octombrie 2012 17:43:45
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define NMAX 500005
int n,A[NMAX],B[NMAX],C[NMAX],r,t,poz,val;
void sort(int st,int dr)
{
	if (st>=dr)
		return ;
	
	poz=rand()%(dr-st+1); val=A[poz];
	r=t=0;
	int i;
	for (i=st; i<=dr; i++)
	{
		if (A[i]<val)
			B[++r]=A[i];
		if (A[i]>val)
			C[++t]=A[i];
	}
	for (i=1; i<=r; i++)
		A[st+i-1]=B[i];
	for (i=st+r; i<=dr-t; i++)
		A[i]=val;
	for (i=1; i<=t; i++)
		A[dr-t+i]=C[i];
	
	sort(st,st+r-1);
	sort(dr-t+1,dr);
}
int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	srand(time(0));
	scanf("%d",&n);
	int i;
	for (i=1; i<=n; i++)
		scanf("%d",&A[i]);
	sort(1,n);
	for (i=1; i<=n; i++)
		printf("%d ",A[i]);
	printf("\n");
	return 0;
}