Cod sursa(job #1385152)

Utilizator danstefanDamian Dan Stefan danstefan Data 11 martie 2015 18:40:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,i,v[500010],cn,j;
void hip(int i)
{
    int fs, fd;
    if (2 * i > n) return;
    if (2 * i <= n)
    {
        fs = v[2*i];
        if (2 * i + 1 <= n) fd = v[2 * i + 1];
        else fd = fs - 1;
        if (fs > fd)
        {
            if (v[2 * i] > v[i])
            {
                swap(v[2 * i], v[i]);
                hip(2 * i);
            }
        }
        else if (v[2 * i + 1] > v[i])
        {
            swap(v[2 * i + 1], v[i]);
            hip(2 * i + 1);
        }
    }
}
int main()
{
    freopen("algsort.in","r",stdin);
    ofstream g ("algsort.out");
    scanf("%d",&n);
    cn=n;
    for(i=1; i<=n; i++)
        scanf("%d",&v[i]);
    for(j=n/2; j>=1; --j)
        hip(j);

    while (n)
    {
        swap(v[1],v[n]);
        n--;
        hip (1);
    }

    for(i=1; i<=cn; i++)
        g<<v[i]<<" ";
    return 0;
}