Cod sursa(job #1956921)

Utilizator i_vlad17Vlad Alecu i_vlad17 Data 7 aprilie 2017 10:07:47
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
#include <algorithm>

using namespace std;
int n,i,H[1000];
ifstream f ("algsort.in");
ofstream g ("algsort.out");;

void HeapDown(int r, int k)
{
    int st,dr,i;
    if(2*r<=k)
    {
        st=H[2*r];
        if(2*r+1<=k)
            dr=H[2*r+1];
        else
            dr=st-1;
        if(st>dr) i=2*r;
        else
            i=2*r+1;
        if(H[r]<H[i])
        {
            swap(H[r],H[i]);
            HeapDown(i,k);
        }
    }
}

void HeapUp(int k)
{
    int t;
    if(k<=1) return;
    else
    {
        t=k/2;
        if(H[k]>H[t])
        {
            swap(H[k],H[t]);
            HeapUp(t);
        }
    }
}

void BuildHeap(int k)
{
    for(i=1; i<=n; i++)
        HeapUp(i);
}

void HeapSort(int k)
{
    while(k>1)
    {
        swap(H[1],H[k]);
        k--;
        HeapDown(1,k);
    }
}

int main()
{
    f>>n;
    for(i=1; i<=n; i++)
        f>>H[i];
    BuildHeap(n);
    HeapSort(n);
    for(i=1; i<=n; i++)
        g<<H[i]<<" ";
    return 0;
}