Pagini recente » Cod sursa (job #2731429) | Cod sursa (job #560595) | Cod sursa (job #748582) | Cod sursa (job #2143702) | Cod sursa (job #795662)
Cod sursa(job #795662)
#include <stdio.h>
#define NMAX 500005
int n,A[NMAX],r;
void change(int x,int y)
{
int aux=A[x];
A[x]=A[y]; A[y]=aux;
}
void up(int poz)
{
while (poz>1 && A[poz/2]>A[poz])
{
change(poz,poz/2);
poz/=2;
}
}
void down(int poz)
{
if ((2*poz<=r && A[2*poz]<A[poz]) || (2*poz+1<=r && A[2*poz+1]<A[poz]))
{
int best_poz=2*poz;
if (2*poz+1<=r && A[2*poz+1]<A[best_poz])
best_poz=2*poz+1;
change(poz,best_poz);
down(best_poz);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
int i,x;
for (i=1; i<=n; i++)
{
scanf("%d",&x);
A[++r]=x;
up(r);
}
for (i=1; i<=n; i++)
{
printf("%d ",A[1]);
A[1]=A[r]; r--;
down(1);
}
printf("\n");
return 0;
}