Pagini recente » Cod sursa (job #1814881) | Cod sursa (job #1186995) | Cod sursa (job #242687) | Cod sursa (job #1499825) | Cod sursa (job #1044939)
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int i,j,m,n,h[500003];
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 HeapSort(int k)
{
while(k>1)
{
swap(1,k); k--;
HeapDw(1,k);
}
}
int main()
{
f>>n;
for(i=1; i<=n; i++)
f>>h[i];
for(i=2; i<=n; i++)
HeapUp(i);
HeapSort(n);
for(i=1; i<=n; i++)
g<<h[i]<<' ';
g<<'\n';
return 0;
}