Cod sursa(job #660390)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 12 ianuarie 2012 20:25:35
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>
#define IN "algsort.in"
#define OUT "algsort.out"

using namespace std;

int *a;
int n, k;

void pre(int st, int dr, int &k)
{
    int stD, drD, aux;
    stD = 0;
    drD = -1;
    while (st < dr)
    {
        if (a[st] > a[dr])
        {
            aux = a[st];
            a[st] = a[dr];
            a[dr] = aux;
            aux = stD;
            stD = -drD;
            drD = -aux;
        }
        st += stD;
        dr += drD;
    }
    k = st;
}

void quick(int st, int dr)
{
    if (st < dr)
    {
        pre(st, dr, k);
        quick(st, k - 1);
        quick(k + 1, dr);
    }
}

int main()
{
    freopen (IN, "r", stdin);
    freopen (OUT, "w", stdout);

    scanf ("%d", &n);

    a = new int[n];

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

    quick(0, n - 1);

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

    printf("\n");
    fclose(stdin);
    fclose(stdout);
    delete a;
    return 0;
}