Pagini recente » Monitorul de evaluare | Autentificare | Cod sursa (job #2356656) | Cod sursa (job #2012360) | Cod sursa (job #965514)
Cod sursa(job #965514)
// HeapSort
#include<cstdio>
#include<algorithm>
using namespace std;
const int NMAX = 500005;
int i,N,A[NMAX],T;
void HeapUp(int F)
{
int P=F/2;
if(!P) return;
if(A[P]<A[F])
{
swap(A[P],A[F]);
HeapUp(P);
}
}
void HeapDown(int P)
{
int F=P*2;
if(F>N) return;
if(A[F+1]>A[F] && F+1<=N) F=F+1;
if(A[P]<A[F])
{
swap(A[P],A[F]);
HeapDown(F);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&A[i]);
HeapUp(i);
}
for(T=N,i=N;i>=2;i--)
{
swap(A[1],A[i]);
N--;
HeapDown(1);
}
for(i=1;i<=T;i++) printf("%d ",A[i]);
return 0;
}