Cod sursa(job #1584050)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 29 ianuarie 2016 17:49:50
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>

#define Nmax 500005
#define DIM 666013

char buffer[DIM];
int pz = DIM - 1;

void Read(int &A)
{
    A = 0;
    while('0' > buffer[pz] || buffer[pz] > '9')
        if(++pz == DIM)
            fread(buffer,1,DIM,stdin),pz = 0;
    while('0' <= buffer[pz] && buffer[pz] <= '9')
    {
        A = A * 10 + buffer[pz] - 48;
        if(++pz == DIM)
            fread(buffer,1,DIM,stdin), pz = 0;
    }
}

using namespace std;

int A[Nmax],N;



void Read()
{
    Read(N);
    for(int i = 1; i <= N; ++i)
        Read(A[i]);
    srand(unsigned(time(0)));
}

int Partition(int li,int lf,int piv)
{
    swap(A[lf],A[piv]);
    for(int i = li; i < lf; ++i)
        if(A[i] <= A[lf])
            swap(A[i],A[li++]);
    swap(A[li],A[lf]);
    return li;
}

void Quicksort(int li,int lf)
{
    if(li >= lf)
        return;
    int piv = li + rand() % (lf - li + 1),pos;
    pos = Partition(li,lf,piv);
    Quicksort(li,pos-1);
    Quicksort(pos+1,lf);
}

void Print()
{
    for(int i = 1; i <= N; ++i)
        printf("%d ",A[i]);
}

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

    Read();
    Quicksort(1,N);
    Print();

    return 0;
}