Pagini recente » Cod sursa (job #2046474) | Cod sursa (job #552614) | Cod sursa (job #1100470) | Cod sursa (job #1197600) | Cod sursa (job #1040967)
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int H[500000],n;
void swap(int k, int t)
{
int x;
x=H[t];
H[t]=H[k];
H[k]=x;
}
void heapup(int k)
{
int t;
if (k<=1) return;
t=k/2;
if(H[k]>H[t])
{
swap(k,t);
heapup(t);
}
}
void heapdw(int r,int k)
{
int st,dr,i;
if(2*r<=k)
{
st=H[2*r];
if(2*r+1<=k) dr=H[2*r+1];
else dr=st-1;
if(st>dr) i=2*r;
else i=2*r+1;
if(H[r]<H[i])
{
swap(r,i);
heapdw(i,k);
}
}
}
void buildh(int k)
{
int i;
for(i=1;i<=k;i++)
heapup(i);
}
void heapsort(int k)
{
while(k>1)
{
swap(1,k); k--;
heapdw(1,k);
}
}
int main()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>H[i];
buildh(n-1);
heapsort(n);
for(i=1;i<=n;i++)
g<<H[i]<<" ";
return 0;
}