Pagini recente » Cod sursa (job #2454139) | Cod sursa (job #289407) | Cod sursa (job #2288225) | Cod sursa (job #312609) | Cod sursa (job #1315758)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMax = 500002;
int H[NMax];
int Heapsize;
int n;
inline int left_child(int i)
{
return i*2;
}
inline int right_child(int i)
{
return i*2 +1;
}
inline int parent(int i)
{
return i/2;
}
void MaxHeapify(int i)
{
int l,r,largest;
l= left_child(i);
r= right_child(i);
if(l<=Heapsize && H[l]> H[i])
largest = l;
else
largest = i;
if(r<=Heapsize && H[r]> H[largest])
largest = r;
if(largest != i)
{
swap(H[i],H[largest]);
MaxHeapify(largest);
}
}
void Build_Max_Heap()
{
Heapsize = n;
for(int i=n/2;i>=1;i--)
MaxHeapify(i);
}
void HeapSort()
{
int i;
Build_Max_Heap();
for(i=Heapsize; i>=2;i--)
{
swap(H[1],H[i]);
Heapsize--;
MaxHeapify(1);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int i;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>H[i];
}
HeapSort();
for(i=1;i<=n;i++)
cout<<H[i]<<" ";
}