Pagini recente » Cod sursa (job #992879) | Cod sursa (job #566518) | Cod sursa (job #2273868) | Cod sursa (job #1768952) | Cod sursa (job #1326105)
#include <fstream>
#define NMax 500005
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int X[NMax],H[NMax];
int N,NHeap;
void Read()
{
fin>>N;
for(int i=1;i<=N;i++)
fin>>X[i];
}
void UpHeap(int x)
{
int TT=x/2;
if(TT && H[x]<H[TT])
{
swap(H[x],H[TT]);
UpHeap(TT);
}
}
void DownHeap(int x)
{
int Son=2*x;
if(Son+1<=NHeap && H[Son+1]<H[Son])
Son++;
if(Son<=NHeap && H[Son]<H[x])
{
swap(H[Son],H[x]);
DownHeap(Son);
}
}
void BuildHeap()
{
for(int i=1;i<=N;i++)
{
H[++NHeap] = X[i];
UpHeap(NHeap);
}
}
void HeapSort()
{
for(int i=1;i<=N;i++)
{
X[i] = H[1];
H[1] = H[NHeap--];
DownHeap(1);
}
}
void Print()
{
for(int i=1;i<=N;i++)
fout<<X[i]<<" ";
fout<<"\n";
}
int main()
{
Read();
BuildHeap();
HeapSort();
Print();
return 0;
}