Pagini recente » Cod sursa (job #1365692) | Cod sursa (job #842299) | Cod sursa (job #2872642) | Cod sursa (job #1863741) | Cod sursa (job #1479610)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
typedef int H[500005];
H Heap;
int n;
inline int father(int nod)
{
return nod >> 1;
}
inline int left_son(int nod)
{
return nod << 1;
}
inline int right_son(int nod)
{
return (nod << 1) + 1;
}
void downheap(H Heap, int n, int k)
{
int nod = 1;
for (; nod;)
{
nod = 0;
if (left_son(k) <= n)
{
nod = left_son(k);
if (right_son(k) <= n && Heap[left_son(k)] < Heap[right_son(k)])
nod = right_son(k);
}
if (Heap[nod] < Heap[k]) nod = 0;
if (nod)
{
swap(Heap[nod], Heap[k]);
k = nod;
}
}
}
void form_heap(H Heap, int n)
{
for (int i = n >> 1; i >= 1; i--)
downheap(Heap, n, i);
}
void H_sort(H Heap, int n)
{
form_heap(Heap, n);
for (int i = n; i > 1; i--)
swap(Heap[1], Heap[i]),
downheap(Heap, i - 1, 1);
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
fin >> Heap[i];
H_sort(Heap, n);
for (int i = 1; i <= n; i++)
fout << Heap[i] << " ";
return 0;
}