Pagini recente » Cod sursa (job #1928565) | Cod sursa (job #378803) | Cod sursa (job #3254665) | Cod sursa (job #3127652) | Cod sursa (job #475689)
Cod sursa(job #475689)
#include<stdio.h>
int k,v[501010];
void inter(int &a,int &b)
{
int c;
c=a;
a=b;
b=c;
}
void down_heap(int j)
{
int minim=1>>31,minj=0;
if(j*2<=k)
if(v[j*2]<v[j])
{
minim=v[j*2];
minj=j*2;
}
if(j*2+1<=k)
if(v[j*2+1]<v[j])
{
if(v[j*2+1]<minim)
{
minim=v[j*2+1];
minj=j*2+1;
}
}
if(minim!=1>>31)
{
inter(v[minj],v[j]);
down_heap(minj);
}
}
void pop()
{
v[1]=v[k];
--k;
down_heap(1);
}
void up_heap(int j)
{
if(j/2!=0)
if(v[j/2]>v[j])
{
inter(v[j/2],v[j]);
up_heap(j/2);
}
}
int N,x;
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
for(int i=1;i<=N;++i)
{
scanf("%d",&x);
v[i]=x;
up_heap(i);
}
k=N;
while(k>0)
{ // printf("!");
printf("%d ",v[1]);
pop();
}
}