Cod sursa(job #1852964)

Utilizator alexman262Belbu Alexandru Marian alexman262 Data 21 ianuarie 2017 12:14:50
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int h[1000002],nh,i,aux;
void urcare(int heap[],int p)
{
    int aux;
    while(p>=2&&heap[p/2]>heap[p])
    {
        aux=heap[p];
        heap[p]=heap[p/2];
        heap[p/2]=aux;
        p=p/2;
    }
}
void coborare(int heap[],int nh,int p)
{
    int aux,r;
    while(2*p<=nh)
    {
        r=2*p;
        if(r+1<=nh&&heap[r+1]<heap[r])
        {
            r=r+1;
        }
        if(heap[p]>heap[r])
        {
            aux=heap[p];
            heap[p]=heap[r];
            heap[r]=aux;
            p=r;
        }
        else
        {
            break;
        }
    }
}
int main()
{
    fin>>nh;
    for(i=1;i<=nh;i++)
    {
        fin>>h[i];
    }
    for(i=1;i<=nh;i++)
    {
        urcare(h,i);
    }
    for(i=nh;i>=2;i--)
    {
        aux=h[1];
        h[1]=h[i];
        h[i]=aux;
        coborare(h,i-1,1);
    }
    for(i=nh;i>=1;i--)
    {
        fout<<h[i]<<" ";
    }
    fin.close();
    fout.close();
    return 0;

}