Cod sursa(job #1807930)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 17 noiembrie 2016 08:31:49
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>
#include <algorithm>
#include <cstdlib>

#define in "algsort.in"
#define out "algsort.out"
#define NMAX (500000 + 7)
#define RANDVAL 697

using namespace std;
int n, v[NMAX], aux[NMAX], ct;

void qSort(const int &st, const int &dr)
{
    if(st >= dr) return ;
    int pivot = (rand()%(dr-st+1)) + st;
    ct = st-1;
    for(int i = st; i<= dr; ++i)
    {
        if(i == pivot) continue;
        if(v[i] <= v[pivot]) aux[++ct] = v[i];
    }
    aux[++ct] = v[pivot];
    pivot = ct;
    for(int i = st; i<= dr; ++i)
    {
        if(v[i] > aux[pivot]) aux[++ct] = v[i];
    }
    for(int i = st; i<= dr; ++i) v[i] = aux[i];
    qSort(st, pivot-1);
    qSort(pivot+1, dr);
}

int main()
{
    freopen(in, "r", stdin);
    freopen(out, "w", stdout);
    srand(RANDVAL);
    scanf("%d", &n);
    for(int i = 1; i<= n; ++i) scanf("%d", &v[i]);
    qSort(1, n);
    for(int i = 1; i<= n; ++i) printf("%d ", v[i]);
    printf("\n");
    return 0;
}