Cod sursa(job #1040970)

Utilizator flamey19Savu Daniel flamey19 Data 25 noiembrie 2013 11:50:42
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");
int H[500000],n;
void swap(int k, int t)
{
    int x;
    x=H[t];
    H[t]=H[k];
    H[k]=x;
}
void heapup(int k)
{
    int t;
    if (k<=1) return;
    t=k/2;
    if(H[k]>H[t])
    {
        swap(k,t);
        heapup(t);
    }
}
void heapdw(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(r,i);
            heapdw(i,k);
        }
    }
}
void buildh(int k)
{
    int i;
    for(i=1;i<k;i++)
    heapup(i);
}
void heapsort(int k)
{
    while(k>1)
    {
        swap(1,k); k--;
        heapdw(1,k);
    }
}
int main()
{
    int i;
    f>>n;
    for(i=1;i<=n;i++)
        f>>H[i];
    buildh(n-1);
    heapsort(n);
    for(i=1;i<=n;i++)
        g<<H[i]<<" ";
        return 0;
}