Cod sursa(job #1410367)

Utilizator andrei.arnautuAndi Arnautu andrei.arnautu Data 31 martie 2015 00:21:32
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
/*
    How about a coding trick?
*/
#include <cstdio>
#define DIM 500500
using namespace std;
FILE *fin=freopen("algsort.in","r",stdin);
FILE *fout=freopen("algsort.out","w",stdout);

int n;
int A[DIM];

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

inline int Split(int lo, int hi)
{
    int st, dr, aux;
    st = lo, dr = hi, aux = A[lo];

    while( st < dr )
    {
        while( st < dr && aux <= A[dr] )
            --dr;
        A[st] = A[dr];

        while( st < dr && aux >= A[st] )
            ++st;
        A[dr] = A[st];
    }
    A[st] = aux;
    return st;
}

inline void Quick_Sort(int st, int dr)
{
    int m = Split(st, dr);

    if( m - 1 > st )
        Quick_Sort(st, m - 1);
    if( m + 1 < dr )
        Quick_Sort(m + 1, dr);
}

int main()
{
    Read();
    Quick_Sort(1, n);

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