Cod sursa(job #2309620)

Utilizator mariusn01Marius Nicoli mariusn01 Data 29 decembrie 2018 14:22:50
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
using namespace std;

int v[500010], n, i;
ifstream fin ("algsort.in");
ofstream fout("algsort.out");
int poz(int st, int dr) {
    int i = st, j = dr, ii = 0, jj = -1;
    while (i!=j) {
        if (v[i] > v[j]) {
            int aux = v[i];
            v[i] = v[j];
            v[j] = aux;
            aux = ii;
            ii = -jj;
            jj = -aux;
        }
        i+=ii;
        j+=jj;
    }
    return i;

}

void sorteaza(int st, int dr) {
    if (st < dr) {
        int p = poz(st, dr);
        /// duce pe v[st] la locul sau in cadrul secventei
        /// si inainte sa returneze pozitia unde l-a dus
        /// separa celelalte elemente ale secvente astfel:
        /// cele mai mici ca elementul asezat in tanga lui si cele mai mari in dreapta
        sorteaza(st, p-1);
        sorteaza(p+1, dr);
        /// observam ca la acest algoritm operatiile se fac inainte de autoapeluri
        /// aitoapelurile avand sens tocmai datorita separarii elementelor
    }
}

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

}