Pagini recente » Cod sursa (job #732689) | Cod sursa (job #2826080) | Cod sursa (job #1650609) | Cod sursa (job #1087556) | Cod sursa (job #1575648)
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
const int NMax = 500005;
int X[NMax],Heap[NMax];
int N,NHeap;
void Read()
{
fin>>N;
for(int i = 1; i<=N; i++)
fin>>X[i];
}
void Upheap(int Nod)
{
int Tata = Nod / 2;
if(Tata && Heap[Tata]>Heap[Nod])
{
swap(Heap[Nod],Heap[Tata]);
Upheap(Tata);
}
}
void BuildHeap()
{
for(int i = 1; i<=N; i++)
{
Heap[++NHeap] = X[i];
Upheap(NHeap);
}
}
void DownHeap(int Nod)
{
int Son = 2 * Nod;
if( Son + 1 <= NHeap && Heap[Son+1] < Heap[Son])
Son++;
if(Son <= NHeap && Heap[Son] < Heap[Nod])
{
swap(Heap[Son], Heap[Nod]);
DownHeap(Son);
}
}
void Sort()
{
BuildHeap();
for(int i = 1; i<=N; i++)
{
X[i] = Heap[1];
Heap[1] = Heap[NHeap--];
DownHeap(1);
}
}
void Print()
{
for(int i = 1; i<=N; i++)
fout<<X[i]<<" ";
}
int main()
{
Read();
Sort();
Print();
return 0;
}