Pagini recente » Cod sursa (job #1408729) | Cod sursa (job #1450709) | Cod sursa (job #1398050) | Cod sursa (job #2359955) | Cod sursa (job #1956922)
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
int n,i,H[500010];
ifstream f ("algsort.in");
ofstream g ("algsort.out");;
void HeapDown(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(H[r],H[i]);
HeapDown(i,k);
}
}
}
void HeapUp(int k)
{
int t;
if(k<=1) return;
else
{
t=k/2;
if(H[k]>H[t])
{
swap(H[k],H[t]);
HeapUp(t);
}
}
}
void BuildHeap(int k)
{
for(i=1; i<=n; i++)
HeapUp(i);
}
void HeapSort(int k)
{
while(k>1)
{
swap(H[1],H[k]);
k--;
HeapDown(1,k);
}
}
int main()
{
f>>n;
for(i=1; i<=n; i++)
f>>H[i];
BuildHeap(n);
HeapSort(n);
for(i=1; i<=n; i++)
g<<H[i]<<" ";
return 0;
}