Cod sursa(job #978898)

Utilizator gabriela95Andreea Gabriela gabriela95 Data 30 iulie 2013 09:56:52
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>

using namespace std;


int v[500010], i, n, p, c, aux;


int main () {
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    fin>>n>>v[1];
    for (i=2;i<=n;i++) {
        fin>>v[i];
        //urc pe v[i] in heapul cu i-1 elemente existent deja
        c = i;
        p = (i>>1);
        while (p > 0) {
            if (v[c] > v[p]) {
                aux = v[c];
                v[c] = v[p];
                v[p] = aux;
            } else
                break;
            c = p;
            p = (p>>1);
        }
    }

    for (i=n;i>=2;i--) {
        aux = v[1];
        v[1] = v[i];
        v[i] = aux;
        // corectez un heap cu i-1 noduri cu vf nepotrivit
        p = 1;
        c = (p<<1);
        while (c <= i-1) {
            if (c+1 <= i-1 && v[c+1] > v[c])
                c++;
            if (v[p]<v[c]) {
                aux = v[p];
                v[p] = v[c];
                v[c] = aux;
            }
            p = c;
            c <<= 1;
        }
    }
    for (i=1;i<=n;i++)
        fout<<v[i]<<" ";
    return 0;
}