Pagini recente » Cod sursa (job #186158) | Cod sursa (job #2288726) | Cod sursa (job #2793518) | Cod sursa (job #2111073) | Cod sursa (job #2290777)
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int heap[1000005];
int n, k;
void adauga_nod(int pozitie)
{
if(pozitie > 1)
{
if(heap[pozitie] <= heap[pozitie/2])
{
int aux = heap[pozitie];
heap[pozitie] = heap[ pozitie / 2];
heap[pozitie / 2] = aux;
adauga_nod(pozitie / 2);
}
}
}
void restabilire_arbore( int pozitie, int top)
{
int left, right;
if(pozitie * 2 <= top)
{
left = heap[pozitie * 2];
if(pozitie * 2 + 1 <= top)
right = heap[ pozitie * 2 + 1];
else right = left + 1;
if( left < right && heap[pozitie] > left)
{
int aux = heap[pozitie];
heap[pozitie] = heap[pozitie * 2];
heap[pozitie * 2] = aux;
restabilire_arbore(pozitie * 2, top);
}
else if( heap[ pozitie] > right)
{
int aux = heap[pozitie];
heap[pozitie] = heap[pozitie * 2 + 1];
heap[pozitie * 2 + 1] = aux;
restabilire_arbore(pozitie * 2 + 1, top);
}
}
}
int main()
{
f >> n;
for(int i = 1; i <= n; i++)
{
f >> heap[i];
adauga_nod(i);
}
// g << heap[1]<<" ";
//int aux = heap[1];
//heap[1] = heap[n];
//heap[n] = aux;
for( int i = n; i >= 1; i--)
{
//restabilire_arbore(1, i);
int aux = heap[1];
heap[1] = heap[i];
heap[i] = aux;
restabilire_arbore(1, i-1);
}
for(int i= n; i >= 1; i--)
g << heap[i]<< " ";
return 0;
}