Pagini recente » Cod sursa (job #982788) | Cod sursa (job #429482) | Cod sursa (job #2281047) | Cod sursa (job #378612) | Cod sursa (job #1524836)
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
void max_heap( long long v[], int i, long long n)
{
int stang, drept, larg, poz;
stang=2*i;
drept=(2*i+1);
if( (stang<=n) and (v[stang]>v[i]) )
larg=stang;
else
larg=i;
if( (drept<=n) and (v[drept]>v[larg]) )
larg=drept;
if( larg!=i)
{
poz=v[i];
v[i]=v[larg];
v[larg]=poz;
max_heap( v, larg, n);
}
}
void constr_max_heap(long long v[], long long n)
{
int k;
for( k=n/2; k>=1; k--)
{
max_heap( v, k, n);
}
}
void Heap( long long v[], long long n)
{
constr_max_heap( v, n);
int i, tempor;
for( i=n; i>=2; i--)
{
tempor=v[i];
v[i]=v[1];
v[1]=tempor;
max_heap( v, 1, i-1);
}
}
int main()
{
long long n, i, v[5000001];
in>>n;
for( i=0; i<n; i++)
{
in>>v[i];
}
Heap( v, n);
for( i=0; i<n; i++)
{
out<<v[i]<<' ';
}
return 0;
}