Pagini recente » Cod sursa (job #918784) | Cod sursa (job #2960475) | Cod sursa (job #727533) | Cod sursa (job #1560530) | Cod sursa (job #371889)
Cod sursa(job #371889)
#include<fstream>
using namespace std;
ifstream fin("heap.in");
ofstream fout("heap.out");
int n,h[1000];
void cerne(int);
void promoveaza(int);
void cerne(int k)
{
int i,eh=0,aux;
while(k*2<=n && !eh)
{
i=2*k;
if(i+k==n && h[i++]<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 i,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 hs(int nr)
{
int aux;
for(;nr>1;)
{
aux=h[1];
h[1]=h[nr];
h[nr]=aux;
nr--;
cerne(1);
}
}
void read()
{
n=0;
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>h[i];
promoveaza(i);
}
}
void write()
{
for(int i=1;i<=n;i++)
fout<<h[i]<<" ";
}
int main()
{
read();
hs(n);
write();
fin.close();
fout.close();
return 0;
}