Pagini recente » Cod sursa (job #1920551) | Cod sursa (job #1343738) | Cod sursa (job #624213) | Cod sursa (job #595565) | Cod sursa (job #1956895)
#include <cstdio>
#include <algorithm>
#define NMAX 500000+5
using namespace std;
int N;
int v[NMAX];
void CreateHeap(int);
void HeapUp(int);
void HeapDown(int,int);
void CreateHeap(int k)
{
for(int i=2; i<=k; i++)
HeapUp(i);
}
void HeapUp(int j)
{
if(j==1)
return;
else if(v[j]>v[j/2])
{
swap(v[j],v[j/2]);
HeapUp(j/2);
}
}
void HeapDown(int f,int k)
{
int st,dr,i;
if(2*f<=k)
{
st=v[2*f];
if(2*f+1<=k)
dr=v[2*f+1];
else dr=st-1;
if(st>dr)
i=2*f;
else i=2*f+1;
if(v[f]<v[i])
{
swap(v[f],v[i]);
HeapDown(i,k);
}
}
}
void HeapSort(int k)
{
if(k==1)
return;
else
{
swap(v[1],v[k]);
HeapDown(1,k-1);
HeapSort(k-1);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
for(int i=1; i<=N; i++)
scanf("%d",&v[i]);
CreateHeap(N);
HeapSort(N);
for(int i=1; i<=N; i++)
printf("%d ",v[i]);
return 0;
}