Pagini recente » Cod sursa (job #993020) | Cod sursa (job #3269487) | Cod sursa (job #1198656) | Cod sursa (job #241723) | Cod sursa (job #2811209)
#include <bits/stdc++.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algort.out");
int n;
int heap[5000001];
void read()
{
f>>n;
for(int i = 1;i <= n;++i)
f>>heap[i];
}
void update_heap(int heap_size, int position)
{
int left = 2 * position;
int right = 2 * position + 1;
int largest = position;
if(left <= heap_size && heap[left] > heap[largest])
largest = left;
if(right <= heap_size && heap[right] > heap[largest])
largest = right;
if(largest != position)
{
swap(heap[largest], heap[position]);
update_heap(heap_size, largest);
}
}
void build_heap()
{
for(int i = n / 2;i >= 1;--i)
update_heap(n, i);
}
void solve()
{
build_heap();
int heap_size = n;
for(int i = heap_size;i >= 2;--i)
{
swap(heap[i], heap[1]);
--heap_size;
update_heap(heap_size, 1);
}
for(int i = 1;i <= n;++i)
g<<heap[i]<<" ";
}
int main()
{
read();
solve();
return 0;
}