Cod sursa(job #1246727)

Utilizator mariusn01Marius Nicoli mariusn01 Data 21 octombrie 2014 16:32:20
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

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

void swap(int &a, int &b) {
    int aux = a;
    a = b;
    b = aux;
}

int main() {
    fin>>n>>v[1];
    for (i=2;i<=n;i++) {
        fin>>v[i];
        // introduc pe v[i] in heapul deja corect cu primele i-1 elemente
        c=i; p = i/2;
        while (p>=1) {
            if (v[c] > v[p])
                swap(v[c], v[p]);
            else
                break;
            c = p;
            p = c/2;
        }
    }
    for (i=n;i>=2;i--) {
        swap(v[1], v[i]);
        // corectez heapul cu i-1 elemente stricat de v[1]
        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[c], v[p]);
            else
                break;

            p = c;
            c = 2*p;

        }

    }

    for (i=1;i<=n;i++)
        fout<<v[i]<<" ";
}