Cod sursa(job #590440)

Utilizator sealTudose Vlad seal Data 17 mai 2011 14:27:56
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<cstdio>
#include<cstdlib>
using namespace std;

#define INPUT "algsort.in"
#define OUTPUT "algsort.out"
#define NMAX (1 << 19)
int A[NMAX], n;

void swap(int &a, int &b)
{
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}

void qsort(int l, int r)
{
    if(l >= r)
        return;

    swap(A[l], A[l + rand() % (r - l) + 1]);

    int v = A[l], i = l, j = r;

    while(i < j)
    {
        while(i < j && A[j] >= v)
            --j;
        A[i] = A[j];
        while(i < j && A[i] <= v)
            ++i;
        A[j] = A[i];
    }
    A[i] = v;

    qsort(l, i - 1);
    qsort(i + 1, r);
}

int main()
{
    freopen(INPUT, "r", stdin);
    freopen(OUTPUT, "w", stdout);

    scanf("%d", &n);
    for(int i = 0; i < n; ++i)
        scanf("%d", A + i);

    qsort(0, n - 1);

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

    return 0;
}