Cod sursa(job #2267004)

Utilizator mariusn01Marius Nicoli mariusn01 Data 23 octombrie 2018 09:19:35
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;

int v[500010], w[500010];
int n;
ifstream fin ("algsort.in");
ofstream fout("algsort.out");
int poz(int st, int dr) {
    int dst = 0;
    int ddr = -1;
    int aux;
    while (st < dr) {
        if (v[st] > v[dr]) {
            aux = v[st];
            v[st] = v[dr];
            v[dr] = aux;

            aux = dst;
            dst = -ddr;
            ddr = -aux;

        }
        st += dst;
        dr += ddr;
    }
    return st;
}


void sorteaza(int st, int dr) {
    if (st < dr) {
        int p = poz(st, dr);
        /// aceasta functie va duce primul element din intervalul de indici
        /// st,dr la locul lui si in plus tot ce e in stanga lui va fi
        /// mai mic decat el si tot ce e in dreapta lui va fi mai mare ca el
        sorteaza(st, p-1);
        sorteaza(p+1, dr);
    }
}

int main () {
    fin>>n;
    for (int i=1;i<=n;i++)
        fin>>v[i];
    sorteaza(1, n);
    for (int i=1;i<=n;i++)
        fout<<v[i]<<" ";
    return 0;
}