Pagini recente » Cod sursa (job #1782195) | Cod sursa (job #370733) | Cod sursa (job #2767860) | Cod sursa (job #1793317) | Cod sursa (job #349268)
Cod sursa(job #349268)
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
#define nmax 500001
long long H[200];
unsigned n;
inline int father(int x)
{
return x/2;
}
inline int son1(int x)
{
return 2*x;
}
inline int son2(int x)
{
return 2*x+1;
}
void up_up(long long H[],int k,int n)
{
while(k>1&&H[father(k)]>H[k])
{
swap(H[father(k)],H[k]);
k=father(k);
}
}
void down(long long H[],int k,int n)
{
while(son1(k)<=n&&H[k]>=H[son1(k)])
{
if(son2(k)<=n&&H[son2(k)]<H[son1(k)])
{
swap(H[k],H[son2(k)]);
k=son2(k);
}
else
{
swap(H[k],H[son1(k)]);
k=son1(k);
}
}
}
int main()
{
f>>n;
int nn;
for(int i=1;i<=n;i++)
{
f>>H[i];
up_up(H,i,n);
}
nn=n;
while(nn>0)
{
swap(H[1],H[nn]);
nn--;
down(H,1,nn);
}
for(int i=n;i>=1;i--)
g<<H[i]<<" ";
}