Pagini recente » Cod sursa (job #624967) | Cod sursa (job #703246) | Cod sursa (job #804244) | Cod sursa (job #606584) | Cod sursa (job #1040974)
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int H[500000],n;
void HeapUp(int n)
{
int t;
if(n<=1) return;
t=n/2;
if(H[n]>H[t])
{
swap(H[n],H[t]);
HeapUp(t);
}
}
void buildH(int n)
{
int i;
for(i=2; i<=n; ++i)
HeapUp(i);
}
void HeapDown(int p,int n)
{
int i,St,Dr;
if(2*p<=n)
{
St=H[2*p];
if(2*p+1<=n) Dr=H[2*p+1];
else Dr=St-1;
if(St>Dr) i=2*p;
else i=2*p+1;
if(H[p]<H[i])
{
swap(H[p],H[i]);
HeapDown(i,n);
}
}
}
void SortHeap(int n)
{
while(n>1)
{
swap(H[1],H[n]);
n--;
HeapDown(1,n);
}
}
int main()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>H[i];
buildH(n);
SortHeap(n);
for(i=1;i<=n;i++)
g<<H[i]<<" ";
return 0;
}