Pagini recente » Monitorul de evaluare | Cod sursa (job #302274) | Cod sursa (job #1373703) | Cod sursa (job #1160976) | Cod sursa (job #921814)
Cod sursa(job #921814)
// Heap_Bottom_Up.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#define NMAX 50000
// Heap_Top_Down.cpp : Defines the entry point for the console application.
//
int A[NMAX], H[NMAX], m,n;
int ind_min(int a, int b, int c)
{
int min;
if(b<=m)
{
if(H[a]<H[b])
min=a;
else
min=b;
if(c<=m)
{
if(min>H[c])
min=c;
}
return min;
}
else
return a;
}
int st(int i)
{
return 2*i;
}
int dr(int i)
{
return 2*i +1;
}
void RecHeap(int i)
{
int ind,var;
ind = ind_min(i,st(i), dr(i));
if(ind !=i)
{
var=H[i];
H[i]=H[ind];
H[ind]=var;
RecHeap(ind);
}
}
void H_Init()
{
n=0;
}
int p(int i)
{
return i/2;
}
void H_Push(int key)
{
int i,var;
n++;
H[n]=key;
i=n;
while((i>1) &&(H[p(i)]> H[i]))
{
var = H[p(i)];
H[p(i)]= H[i];
H[i] = var;
i=p(i);
}
}
int H_Pop()
{
int minim;
minim =H[1];
n--;
H[1]=H[n];
RecHeap(1);
return minim;
}
int main()
{
freopen("heap.in", "r", stdin);
freopen("heap.out" , "w", stdout);
scanf("%d", &m);
int i;
for(i=1; i<=m;i++)
scanf("%d", &A[i]);
H_Init();
for(i=1;i<=m;i++)
H_Push(A[i]);
while(n!=0)
{
int k = H_Pop();
printf("%d ",k);
}
return 0;
}