Cod sursa(job #1688238)

Utilizator firutibogdanFiruti Bogdan-Cristian firutibogdan Data 13 aprilie 2016 12:46:45
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<fstream>
using namespace std;
int heap[500002],n,nr,i,x,aux;
void urcare(int nr)
{
    int p,aux;
    p=nr;
    while(p/2>0)
    {
        if(heap[p/2]>heap[p])
        {
            aux=heap[p/2];
            heap[p/2]=heap[p];
            heap[p]=aux;
            p=p/2;
        }
        else
        {
            break;
        }
    }
}
void coborare(int nr)
{
    int p,aux,q;
    p=1;
    while(2*p<=nr)
    {
        q=2*p;
        if(q+1<=nr && heap[q+1]<heap[q])
        {
            q++;
        }
        if(heap[q]<heap[p])
        {
            aux=heap[q];
            heap[q]=heap[p];
            heap[p]=aux;
            p=q;
        }
        else
        {
            break;
        }
    }
}
int main()
{
     ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    fin>>n;
    nr=0;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        nr++;
        heap[nr]=x;
        urcare(nr);
    }
    while(nr>1)
    {
        fout<<heap[1]<<" ";
        aux=heap[1];
        heap[1]=heap[nr];
        heap[nr]=aux;
        nr--;
        coborare(nr);
    }
    fout<<heap[1];
    fin.close();
    fout.close();
    return 0;
}