Pagini recente » Cod sursa (job #2983550) | Cod sursa (job #1153471) | Cod sursa (job #2869372) | Cod sursa (job #903970) | Cod sursa (job #820837)
Cod sursa(job #820837)
#include <cstdio>
#define NMAX 500001
int n,lg=0,heap[NMAX];
void baga(int val);
void scoate1();
void urca(int poz);
void coboara(int poz);
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int i,j;
scanf("%d",&n);;
for(i=1;i<=n;i++)
{
scanf("%d",&j);
baga(j);
}
for(i=1;i<=n;i++)
{
printf("%d ",heap[1]);
scoate1();
}
}
void baga(int val)
{
heap[++lg]=val;
urca(lg);
}
void urca(int poz)
{
int c=poz/2,aux;
while(c>=1)
{
if(heap[c]<heap[poz]) return;
aux=heap[c];
heap[c]=heap[poz];
heap[poz]=aux;
poz=c;
c=c/2;
}
}
void coboara(int poz)
{
int c=poz*2,aux;
while(c<=lg)
{
if(c!=lg && heap[c]>heap[c+1]) c++;
if(heap[c]>heap[poz]) return;
aux=heap[c];
heap[c]=heap[poz];
heap[poz]=aux;
poz=c;
c=c*2;
}
}
void scoate1()
{
heap[1]=heap[lg--];
coboara(1);
}