Cod sursa(job #245769)

Utilizator RobybrasovRobert Hangu Robybrasov Data 18 ianuarie 2009 20:05:15
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
//randomized quicksort
#include <cstdio>
#include <cstdlib>
#define N 500000

int A[N],n,i;

int poz(int a, int b)
{
    int i,j,t,p=rand()%(b-a)+1;
    p+=a-1;
    t=A[a]; A[a]=A[p]; A[p]=t;
    for (i=0, j=-1; a<b; a+=i, b+=j)
        if (A[a]>A[b])
        {
            t=A[a]; A[a]=A[b]; A[b]=t;
            t=i; i=-j; j=-t;
        }

    return a;
}

void sort(int a, int b)
{
    if (a<b)
    {
        int m=poz(a,b);
        sort(a,m-1);
        sort(m+1,b);
    }
}

int main()
{
	freopen("data.in","r",stdin);
	freopen("data.out","w",stdout);
	scanf("%d\n",&n);
	for (i=1; i<=n; i++) scanf("%d",&A[i]);
    sort(1,n);
    for (i=1; i<=n; i++) printf("%d ",A[i]);

    return 0;
}