Cod sursa(job #1238295)

Utilizator rebound212Mihnea Savu rebound212 Data 6 octombrie 2014 17:23:11
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
 
using namespace std;
int i,j,m,n,H[1000],z;
void schimba(int x,int y)
{
    int aux;
    aux=H[x];
    H[x]=H[y];
    H[y]=aux;
}
void HeapUp(int k)
{
    int i,x;
    if(k<=1) return;
    x=k/2;
    if(H[x]<H[k])
    {
        schimba(x,k);
        HeapUp(x);
    }
}
void HeapDw(int l, int k)
{
    int st,dr,kk;
    if(2*l>=k) return;
    st=H[2*l];
    if(2*l+1<=k) dr=H[2*l+1];
    if(st>=dr) kk=2*l;
    else kk=2*l+1;
    if(H[l]<H[kk]){
    schimba(l,kk);
    HeapDw(kk,k);}
}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);z=n;
    for(i=1; i<=n; i++)
    scanf("%d",&H[i]);
    for(i=1; i<n; i++)
    HeapUp(i);
    while(n>0)
    {
    schimba(1,n);
    n--;
    HeapDw(1,n);
    }
    if(H[1]>H[2]) schimba(1,2);
    for(i=1; i<=z; i++)
    printf("%d ",H[i]);
    return 0;
}