Pagini recente » Cod sursa (job #59601) | Cod sursa (job #3154358) | Cod sursa (job #2738636) | Cod sursa (job #2718707) | Cod sursa (job #1238299)
# include <cstdio>
# include <algorithm>
# define MAXN 500001
using namespace std;
int H[MAXN],n,i;
void HeapDown(int p,int n)
{
int i,St,Dr;
if(2*p<=n)
{
St=H[2*p];
if(2*p+1<=n) Dr=H[2*p+1];
else Dr=St-1;
if(St>Dr) i=2*p;
else i=2*p+1;
if(H[p]<H[i])
{
swap(H[p],H[i]);
HeapDown(i,n);
}
}
}
void buildH(int n)
{
int i;
for(i=n/2; i>=1; --i)
HeapDown(i,n);
}
void SortHeap(int n)
{
while(n>1)
{
swap(H[1],H[n]);
n--;
HeapDown(1,n);
}
}
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]);
buildH(n);
SortHeap(n);
for(i=1; i<=n; ++i)
printf("%d ", H[i]);
fclose(stdin);
fclose(stdout);
return 0;
}