Pagini recente » Cod sursa (job #1698530) | Cod sursa (job #420598) | Cod sursa (job #2698525) | Cod sursa (job #2950615) | Cod sursa (job #240371)
Cod sursa(job #240371)
//Heapsort
#include <cstdio>
#define N 500001
int H[N],n,i;
void down(int tata, int n)
{
int fiu=tata<<1,t;
if (H[fiu|1]>H[fiu] && fiu<n) fiu|=1;
while (fiu<=n && H[tata]<H[fiu])
{
t=H[tata]; H[tata]=H[fiu]; H[fiu]=t;
tata=fiu; fiu<<=1;
if (H[fiu|1]>H[fiu] && fiu<n) fiu|=1;
}
}
void build_heap()
{
for (int i=n>>1; i; i--) down(i,n);
}
void sort()
{
int t;
for (i=n; i>1; i--)
{
t=H[1]; H[1]=H[i]; H[i]=t;
down(1,i-1);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d\n",&n);
for (i=1; i<=n; i++) scanf("%d",&H[i]);
build_heap();
sort();
for (i=1; i<=n; i++) printf("%d ",H[i]);
return 0;
}