Pagini recente » Cod sursa (job #346889) | Cod sursa (job #2204765) | Cod sursa (job #1388094) | Cod sursa (job #618960) | Cod sursa (job #1424608)
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 500003
ifstream in("algsort.in");
ofstream out("algsort.out");
int H[nmax],n;
inline int ls(int i)
{
return (2*i);
}
inline int rs(int i)
{
return (2*i+1);
}
inline int father(int i)
{
return (i/2);
}
void BuildHeap();
void Heapify(int i);
void HeapSort()
{
BuildHeap();
for( int i = n ; i > 0 ; i -- )
{
out << H[1] << " ";
swap(H[1],H[i]);
n--;
Heapify(1);
}
}
void BuildHeap()
{
for(int i = n/2; i>0 ; i-- )
Heapify(i);
}
void Heapify(int i)
{
int posmin,pos = i;
posmin = 1;
while(posmin)
{
posmin = pos;
if ( ls(pos) <= n && H[ls(pos)]<H[posmin] )
posmin = ls(pos);
if ( rs(pos)<= n && H[rs(pos)]<H[posmin])
posmin = rs(pos);
if ( pos!=posmin )
{
swap(H[pos],H[posmin]);
pos = posmin;
}
else
pos = 0;
}
}
int main()
{
int i;
in >> n;
for( i = 1 ; i <= n ; i++)
in >> H[i];
HeapSort();
return 0;
}