Pagini recente » Cod sursa (job #243329) | Cod sursa (job #1372029) | Cod sursa (job #2068159) | Cod sursa (job #1878374) | Cod sursa (job #1243698)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 500000 + 1;
int N, heapSize;
int value[Nmax];
void UpHeap( int nod )
{
while ( nod > 1 && value[nod / 2] > value[nod] )
{
swap( value[nod / 2], value[nod] );
nod /= 2;
}
}
void DownHeap( int nod )
{
while ( 2 * nod <= heapSize )
{
int pos = 2 * nod;
if ( 2 * nod + 1 <= heapSize && value[2 * nod + 1] < value[2 * nod] )
pos = 2 * nod + 1;
if ( value[nod] <= value[pos] )
break;
swap( value[nod], value[pos] );
nod = pos;
}
}
void insertHeap( int val )
{
value[ ++heapSize ] = val;
UpHeap( heapSize );
}
int eraseHeap()
{
int val = value[1];
value[1] = value[heapSize--];
DownHeap( 1 );
return val;
}
int main()
{
ifstream in("algsort.in");
ofstream out("algsort.out");
int N, a;
in >> N;
for ( int i = 1; i <= N; ++i )
{
in >> a;
insertHeap( a );
}
for ( int i = 1; i <= N; ++i )
{
out << eraseHeap() << " ";
}
return 0;
}