Pagini recente » Cod sursa (job #1154165) | Cod sursa (job #1409804) | Cod sursa (job #2194749) | Cod sursa (job #1109970) | Cod sursa (job #957976)
Cod sursa(job #957976)
#include<fstream>
using namespace std;
const int MAXN=500010;
int h[MAXN];
int n,heapsize;
inline int parent(int i){return (i>>1);}
inline int left(int i){return (i<<1);}
inline int right(int i){return (i<<1)+1;}
void max_heapify(int i)
{
int l=left(i),r=right(i),largest=i;
if (l<=n && h[l]>h[largest])
largest=l;
if (r<=n && h[r]>h[largest])
largest=r;
if (largest!=i)
{
swap(h[i],h[largest]);
max_heapify(largest);
}
}
void build_maxheap()
{
for (int i=(n>>1);i>=1;--i)
max_heapify(i);
}
void heapsort()
{
build_maxheap();
while (n!=0)
{
swap(h[1],h[n]);
--n;
max_heapify(1);
}
}
void citire()
{
ifstream fin("algsort.in");
fin>>n; heapsize=n;
for (int i=1;i<=n;++i)
fin>>h[i];
fin.close();
}
void afisare()
{
ofstream fout("algsort.out");
for (int i=1;i<=heapsize;++i)
fout<<h[i]<<' ';
fout<<'\n';
fout.close();
}
int main()
{
citire();
heapsort();
afisare();
return 0;
}