Cod sursa(job #287333)

Utilizator AstronothingIulia Comsa Astronothing Data 24 martie 2009 18:56:51
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;

void add(unsigned long h[],long n,long elem)
{
    h[n+1] = elem;
    long ind = n+1;
    while(ind>1 && h[ind]<h[ind/2])
    {
        long aux = h[ind];
        h[ind] = h[ind/2];
        h[ind/2] = aux;
        ind/=2;
    }
}

void descend(unsigned long h[],long n)
{
    long i = 1;
    while (2*i<=n && (h[i]>h[2*i] || h[i]>h[2*i+1]))
    {
        long ind = h[2*i] < h[2*i+1] ? 2*i : 2*i+1;
        long aux = h[i];
        h[i] = h[ind];
        h[ind] = aux;
        i = ind;
    }
}

int main()
{
    ifstream f("algsort.in");
    ofstream f2("algsort.out");

    unsigned long h[500001];
    int n;
    memset(h,2147483647LL,sizeof(h));
    f>>n;

    for(int i=0;i<n;i++)
    {
        unsigned long elem;
        f>>elem;
        add(h,i,elem);
    }

    for(int i=0;i<n;i++)
    {
        f2<<h[1]<<" ";
        h[1] = h[n-i];
        descend(h,n-i-1);
    }

    f.close();
    f2.close();
    return 0;
}