Pagini recente » Cod sursa (job #1443268) | Cod sursa (job #2381495) | Cod sursa (job #2584618) | Cod sursa (job #1125290) | Cod sursa (job #615403)
Cod sursa(job #615403)
#include<cstdio>
#include<queue>
using namespace std;
#define NM 500001
int h[NM],N;
void cobor(int k)
{
int son;
while (true)
{
son=0;
if ((k<<1)<=N)
{
son=k<<1;
if (son+1<=N && h[son+1]>h[son])
++son;
}
if (!son || h[son]<h[k])
return;
int aux=h[k];
h[k]=h[son];
h[son]=aux;
k=son;
}
}
void heapsort()
{
for (int i=N>>1; i>0; --i)
cobor(i);
while (N>1)
{
int aux=h[N];
h[N]=h[1];
h[1]=aux;
--N;
cobor(1);
}
}
void afis(int N)
{
for (int i=1; i<=N; ++i)
printf("%d ",h[i]);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
int CN=N;
for(int i=1; i<=N; ++i)
scanf("%d",&h[i]);
heapsort();
afis(CN);
return 0;
}