Cod sursa(job #1210824)

Utilizator mariusn01Marius Nicoli mariusn01 Data 21 iulie 2014 12:35:38
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#define DIM 500010
using namespace std;

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

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

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

int main() {
    fin>>n;
    for (i=1;i<=n;i++) {
        fin>>v[i];
        c = i;
        p = i/2;
        while (p >= 1) {
            if (v[c] > v[p]) {
                swap(v[c], v[p]);
                c = p;
                p = p/2;
            } else
                break;
        }
    }

    for (i=n;i>=2;i--) {
        swap(v[1], v[i]);
        p = 1;
        c = 2;// corectez heapul cu i-1 elemente
        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]);
                p = c;
                c = 2*p;
            } else
                break;
        }
    }

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

}