Pagini recente » Cod sursa (job #2418888) | Cod sursa (job #929635) | Cod sursa (job #2829253) | Cod sursa (job #2736356) | Cod sursa (job #842259)
Cod sursa(job #842259)
#include <stdio.h>
#define MAXN 500001
int N;
int Nm;
int v[MAXN];
void swap(int x, int y)
{
int aux = v[x];
v[x] = v[y];
v[y] = aux;
}
int max(int x, int y)
{
if( v[x] > v[y] )
return x;
else
return y;
}
void fall(int node)
{
if( (2*node+1) <= N ){
int maxim = max(2*node,2*node+1);
if( v[node] < v[maxim] ){
swap(node,maxim);
fall(maxim);
}
}
else if( (2*node) <= N ){
if( v[node] < v[2*node] )
swap(node,2*node);
}
}
void heapify()
{
int start=1;
while( start < N )
start *= 2;
start = start/2;
int i;
while( start > 0 ){
for(i=0;i<start;i++){
fall(start+i);
}
start /= 2;
}
}
void heapsort()
{
while(N > 1){
swap(1,N);
N--;
fall(1);
}
}
int main(int argc, char* argv[])
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
int i=0;
for(i=1;i<=N;i++)
scanf("%d",&v[i]);
heapify();
Nm = N;
heapsort();
for(i=1;i<=Nm;i++)
printf("%d ",v[i]);
return 0;
}