Pagini recente » Cod sursa (job #1424983) | Cod sursa (job #2452770) | Cod sursa (job #1615724) | Cod sursa (job #407917) | Cod sursa (job #371557)
Cod sursa(job #371557)
#include<fstream>
using namespace std;
long a[500000];
long ls(long k)
{
return (k<<1);
}
long rs(long k)
{
return ((k<<1)+1);
}
long f(long k)
{
return (k>>1);
}
void ex(long x, long y)
{
long aux;
aux=a[x];
a[x]=a[y];
a[y]=aux;
}
void sift(long n, long k)
{
long son;
do
{
son=0;
if(ls(k)<=n)
{
son=ls(k);
if(rs(k)<=n&&a[rs(k)]>a[son])son=rs(k);
if(a[son]<=a[k])son=0;
}
if(son)
{
ex(k,son);
k=son;
}
}
while(son);
}
void bh(long n)
{
long i;
for(i=(n>>1);i;i--)sift(n,i);
}
void heapsort(int n)
{
long i;
bh(n);
for(i=n;i>1;i--)
{
ex(1,i);
sift(i-1,1);
}
}
int main()
{
long i,n;
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
for(i=1;i<=n;i++)f>>a[i];
heapsort(n);
for(i=1;i<=n;i++)g<<a[i]<<' ';
return 0;
}