Pagini recente » Cod sursa (job #2483099) | Cod sursa (job #418484) | Cod sursa (job #2779757) | Cod sursa (job #2632465) | Cod sursa (job #957881)
Cod sursa(job #957881)
#include<fstream>
using namespace std;
const int MAXN=500010;
int n,heapsize;
int h[MAXN];
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_max_heap()
{
for (int i=1;i<=((n>>1)+1);++i)
max_heapify(i);
}
void heapsort()
{
build_max_heap();
while (n!=0)
{
swap(h[n],h[1]);
--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.close();
}
int main()
{
citire();
heapsort();
afisare();
return 0;
}