Pagini recente » Cod sursa (job #3003206) | Cod sursa (job #383536) | Cod sursa (job #2656443) | Cod sursa (job #413460) | Cod sursa (job #1521672)
#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;
int solution[MAXN];
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;
int index = n;
for(int i = 1; i <= n; i++)
{
f >> heap[i];
}
makeHeap();
for(int i=1; i<=n; i++)
{
solution[index] = heap[1];
index--;
remove(1);
}
for(int i=1; i<=n; i++)
g << solution[i] << " ";
return 0;
}