Pagini recente » Cod sursa (job #1948643) | Cod sursa (job #2104496) | Cod sursa (job #3233553) | Cod sursa (job #3180900) | Cod sursa (job #2270138)
#include <cstdio>
#include <algorithm>
using namespace std;
int h[500050],n,i;
void HeapUp( int x)
{
if (x>1) {
if ( h[x] > h[x/2] )
{
swap (h[x], h[x/2]);
HeapUp(x/2);
}
}
}
void HeapDw ( int x, int m )
{
int st=0, dr=0;
if ( 2*x<=m )
{
st=h[2*x];
if ( 2*x+1 <=m )
dr=h[2*x+1];
else dr=st-1;
if (st>dr && h[x]<st)
{
swap(h[x], h[2*x]);
HeapDw(2*x,m);
}
else if (h[x]<dr) {
swap(h[x], h[2*x+1]);
HeapDw(2*x+1,m);
}
}
}
int main() {
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
scanf ("%d", &n);
for( i=1; i<=n; i++ ) {
scanf ("%d", &h[i]);
HeapUp(i);
}
int aux=n;
while ( aux >1 ) {
swap(h[1], h[aux]);
aux--;
HeapDw (1, aux);
}
for(i=1; i<=n; i++ )
printf ("%d ", h[i]);
return 0;
}