Cod sursa(job #1237524)

Utilizator afkidStancioiu Nicu Razvan afkid Data 4 octombrie 2014 11:47:51
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <cstdlib>

using namespace std;

const char InFile[]="algsort.in";
const char OutFile[]="algsort.out";
const int DIMN=500010;

int n,v[DIMN];

int part(int a,int b);

void read()
{
    freopen(InFile,"r",stdin);
    scanf("%d ",&n);

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

void quicksort(int p,int r)
{
    if(p<r)
    {
        int q=part(p,r);
        quicksort(p,q-1);
        quicksort(q+1,r);
    }
}

int part(int p,int r)
{
    int i,j,aux;
    i=p-1;
    j=p;
    int t=p+rand()%(r-p+1);
    aux=v[r];
    v[r]=v[t];
    v[t]=aux;
    while(j!=r)
    {
        if(v[j]<=v[r])
        {
            aux=v[++i];
            v[i]=v[j];
            v[j]=aux;
        }
        j++;
    }
    aux=v[r];
    v[r]=v[++i];
    v[i]=aux;
    return i;
}

void write()
{
    freopen(OutFile,"w",stdout);
    for(int i=1;i<=n;++i)
        printf("%d ",v[i]);
}

int main()
{

    read();
    quicksort(1,n);
    write();
    return 0;
}