Pagini recente » Cod sursa (job #900980) | Cod sursa (job #2237194) | Cod sursa (job #855049) | Cod sursa (job #1906652) | Cod sursa (job #349289)
Cod sursa(job #349289)
#include <fstream>
using namespace std;
typedef long long big;
typedef unsigned uint;
#define nmax 500001
uint n;
big H[nmax];
void swap(big &x,big &y)
{
big ax=x;
x=y;
y=ax;
}
inline uint lson(uint x)
{
return 2*x;
}
inline uint rson(uint x)
{
return 2*x+1;
}
inline uint father(uint x)
{
return x/2;
}
void up_up(big H[],int k,uint n)
{
bool ok=1;
do
{
ok=0;
if(k>1&&H[father(k)]>H[k])
{
ok=1;
swap(H[father(k)],H[k]);
}
if(ok)
{
k=father(k);
}
}while(ok);
}
void down(big H[],int k,uint n)
{
uint son;
do
{
son=0;
if(lson(k)<=n)
{
if(rson(k)<=n&&H[rson(k)]<H[lson(k)])
son=rson(k);
else
son=lson(k);
if(H[k]<=H[son])
son=0;
else
{
swap(H[k],H[son]);
k=son;
}
}
}while(son);
}
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
for(int i=1;i<=n;i++)
{
f>>H[i];
up_up(H,i,n);
}
for(int i=n;i>=2;i--)
{
swap(H[1],H[i]);
down(H,1,i-1);
}
for(int i=n;i>=1;i--)
g<<H[i]<<" ";
return 0;
}