Cod sursa(job #1785545)

Utilizator BLz0rDospra Cristian BLz0r Data 21 octombrie 2016 15:38:20
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
/* Sortare folosita: QSort */
#include <cstdio>
#include <algorithm>
using namespace std;

#define Nmax 500002

FILE *f = fopen("algsort.in", "r");
FILE *g = fopen("algsort.out", "w");

int v[Nmax];

int Partitionare(int st, int dr) {

    int pivot = v[(dr + st) >> 1];

    int x = st - 1;
    int y = dr + 1;

    while (1) {

        do {
            x++;
        }while (v[x] < pivot);

        do {
            y--;
        }while (v[y] > pivot);

        if (x < y)
            swap(v[x], v[y]);
        else
            return y;
    }
}

void QSort(int st, int dr) {

    if (st >= dr)
        return;

    int poz = Partitionare(st, dr);

    QSort(st, poz);
    QSort(poz + 1, dr);
};

int main() {

    int N;

    fscanf(f, "%d", &N);//fin >> N;
    for (int i = 1; i <= N; ++i)
       fscanf(f, "%d", &v[i]); //fin >> v[i];

    random_shuffle(v + 1, v + N + 1);

    QSort(1, N);

    for (int i = 1; i <= N; ++i)
        fprintf(g, "%d ", v[i]);//fout << v[i] << " ";

    return 0;
}