Pagini recente » Cod sursa (job #520262) | Cod sursa (job #2895206) | Cod sursa (job #1919825) | Cod sursa (job #934660) | Cod sursa (job #2233333)
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
class Heap
{
private :
int sz=0;
int a[1000];
inline int Dad(int nod) {return nod/2;}
inline int Left(int nod) {return 2*nod;}
inline int Right(int nod) {return 2*nod+1;}
public :
inline int Size() {return sz;}
inline int GetMin() {return a[1];}
inline void Insert(int value)
{
a[++sz]=value;
int nod=sz;
while(nod>1 && a[Dad(nod)]>=a[nod])
{
swap(a[Dad(nod)],a[nod]);
nod=Dad(nod);
}
}
inline void Rebuild(int nod)
{
int l=Left(nod);
int r=Right(nod);
int id_min=nod;
if(l<=sz && a[l]<a[id_min])
id_min=l;
if(r<=sz && a[r]<a[id_min])
id_min=r;
if(id_min!=nod)
{
swap(a[nod],a[id_min]);
Rebuild(id_min);
}
}
inline void EraseMin()
{
if(sz==0)
return;
swap(a[sz],a[1]);
sz--;
Rebuild(1);
}
};
Heap my_heap;
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
my_heap.Insert(x);
}
for(int i=1;i<=n;i++)
{
cout<<my_heap.GetMin()<<" ";
my_heap.EraseMin();
}
cout<<"\n";
return 0;
}