Pagini recente » Cod sursa (job #694063) | Cod sursa (job #1548154) | Cod sursa (job #1146678) | Cod sursa (job #470707) | Cod sursa (job #1521670)
#include<iostream>
#include<fstream>
#include<vector>
#define FIN "algsort.in"
#define FOUT "algsort.out"
#define MAXN 500001
using namespace std;
int heap[MAXN];
int n;
vector<int> solution;
ifstream f(FIN);
ofstream g(FOUT);
int leftSon(int i)
{
return heap[2 * i];
}
int rightSon(int i)
{
return heap[2 * i + 1];
}
int heapify(int k)
{
if(!(rightSon(k) || leftSon(k)))
{
return 0;
}
else
{
if(rightSon(k) > heap[k])
{
swap(heap[k], heap[2 * k + 1]);
heapify(2 * k + 1);
}
if(leftSon(k) > heap[k])
{
swap(heap[k], heap[2 * k]);
heapify(2 * k);
}
}
return 0;
}
int makeHeap()
{
for(int i = n / 2; i > 0; i--)
{
heapify(i);
}
return 0;
}
int remove(int k)
{
heap[k] = 0;
if(k == 1)
heapify(1);
else heapify(k / 2);
return 0;
}
int main()
{
f >> n;
for(int i = 1; i <= n; i++)
{
f >> heap[i];
}
makeHeap();
for(int i=1; i<=n; i++)
{
solution.push_back(heap[1]);
remove(1);
}
for(vector<int>::reverse_iterator it = solution.rbegin(); it != solution.rend(); it++)
g << *it << " ";
return 0;
}