Cod sursa(job #371886)

Utilizator dead_knightTitei Paul Adrian dead_knight Data 7 decembrie 2009 17:51:03
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<fstream>
using namespace std;
int n, H[500002];
ofstream fout("algsort.out");
void afis(int k)
{
    for(int i=k;i>=1;i--)
    {
        fout<<H[i]<<" ";
    }
    fout<<endl;
}

void cerne(int k, int nr)
{
    int i, eH=0, aux;
    while(!eH && 2*k<=nr)
    {
        i=2*k;
        if(i+1<=nr && H[i+1]<H[i])
            i=i+1;
        if(H[k] <= H[i])
            eH=1;
        else
        {
            aux=H[k];
            H[k]=H[i];
            H[i]=aux;
            k=i;
        }
    }
}

void promoveaza(int k)
{
    int eH=0,aux;
    while(k/2 && !eH)
        if(H[k/2] <= H[k])
            eH=1;
        else
        {
            aux=H[k];
            H[k]=H[k/2];
            H[k/2]=aux;
            k=k/2;
        }
}

void read()
{
    int n;
    ifstream fin("algsort.in");
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>H[i];
        //afis(n);
        promoveaza(i);
        //afis(n);

    }
    fin.close();
}

void HS(int nr)
{
    int aux;
    for(;nr>1;)
    {
        aux=H[1];
        H[1]=H[nr];
        H[nr]=aux;
        nr--;
        cerne(1,nr);
    }
}

int main()
{
    read();
    HS(n);
    afis(n);
    return 0;
}