Pagini recente » Cod sursa (job #680989) | Cod sursa (job #1202668) | Cod sursa (job #2353770) | Cod sursa (job #180455) | Cod sursa (job #690219)
Cod sursa(job #690219)
#include <stdio.h>
#define NMAX 500005
#define FILE "algsort"
#define parent(t)(t>>1)
#define left(t)(t<<1)
#define right(t)(left(t)+1)
#define swap(a,b)(a^=b^=a^=b)
int num[NMAX],N;
void heapify(int node, int N)
{
int l=left(node),r=right(node),maxP;
if(l<=N&&num[l]>=num[node])
maxP=l;
else
maxP=node;
if(r<=N&&num[r]>=num[maxP])
maxP=r;
if(maxP!=node)
swap(num[node],num[maxP]),
heapify(maxP,N);
}
void buildHeap(int N)
{
int i;
for(i=N/2;i>0;i--)
heapify(i,N);
}
void heapsort()
{
int i;
for(i=N;i>1;i--)
{
swap(num[1],num[i]);
heapify(1,i-1);
}
}
int main()
{
int i;
freopen(FILE ".in","r",stdin);
freopen(FILE ".out","w",stdout);
scanf("%d",&N);
for(i=1;i<=N;i++)
scanf("%d",&num[i]);
buildHeap(N);
heapsort();
for(i=1;i<=N;i++)
printf("%d ",num[i]);
return 0;
}