Pagini recente » Cod sursa (job #1088092) | Cod sursa (job #2026866) | Cod sursa (job #2023944) | Cod sursa (job #1186366) | Cod sursa (job #491166)
Cod sursa(job #491166)
#include <fstream>
using namespace std;
const char InFile[]="algsort.in";
const char OutFile[]="algsort.out";
const int MaxN=500005;
ifstream fin(InFile);
ofstream fout(OutFile);
int H[MaxN],HSize,n,V[MaxN],x;
inline int parent(int nod)
{
return nod>>1;
}
inline int left(int nod)
{
return nod<<1;
}
inline int right(int nod)
{
return (nod<<1)+1;
}
void heap_up(int nod)
{
int p=parent(nod);
while(p>0 && H[p]>H[nod])
{
int aux=H[p];
H[p]=H[nod];
H[nod]=aux;
nod=p;
p=parent(nod);
}
}
void heap_down(int nod)
{
while(true)
{
int ind=nod;
int l=left(nod);
if(l<=HSize)
{
if(H[ind]>H[l])
{
ind=l;
}
}
int r=right(nod);
if(r<=HSize)
{
if(H[ind]>H[r])
{
ind=r;
}
}
if(ind!=nod)
{
int aux=H[ind];
H[ind]=H[nod];
H[nod]=aux;
nod=ind;
}
else
{
break;
}
}
}
int main()
{
fin>>n;
for(register int i=0;i<n;++i)
{
fin>>x;
H[++HSize]=x;
heap_up(HSize);
}
fin.close();
for(register int i=0;i<n;++i)
{
V[i]=H[1];
H[1]=H[HSize--];
heap_down(1);
}
for(register int i=0;i<n;++i)
{
fout<<V[i]<<" ";
}
fout.close();
return 0;
}