Cod sursa(job #2277513)

Utilizator mariusn01Marius Nicoli mariusn01 Data 6 noiembrie 2018 13:51:23
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>

using namespace std;
int v[500010], n, c, p, i;
int main () {
    ifstream fin ("algsort.in");
    ofstream fout("algsort.out");

    fin>>n;
    for (i=1;i<=n;i++)
        fin>>v[i];

    for (i=2;i<=n;i++) {
        /// inserez pe v[i] in heapul deja existent cu primele i-1 elemente
        c = i;
        p = c/2;
        while(p >= 1 && v[c] > v[p]) {
            swap(v[c], v[p]);
            c = p;
            p = c/2;
        }
    }

    for (i=n; i>=2; i--) {
        swap(v[1], v[i]);
        /// corectez heapul cu i-1 elemente stricat doar de radacina
        p = 1;
        c = 2;
        while (c <= i-1) {
            if (c+1 <= i-1 && v[c+1] > v[c])
                c++;

            if (v[p] < v[c]) {
                swap(v[p],v[c]);
            } else
                break;

            p = c;
            c = 2*p; /// initial, dar si la o mutare ma asez pe fiul stang intai
        }
    }
    for(i=1;i<=n;i++)
        fout<<v[i]<<" ";
    return 0;
}