Pagini recente » Cod sursa (job #254146) | Cod sursa (job #2567659) | Cod sursa (job #1326624) | Cod sursa (job #904689) | Cod sursa (job #1053833)
#include <fstream>
using namespace std;
long long v[500001],n,i;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
long long indvalmin(long long i,long long n)
{
if(2*i+1<=n)
if(v[2*i]<=v[2*i+1])
return 2*i;
else
return 2*i+1;
else
return 2*i;
}
long long combinare(long long i,long long n)
{
long long ind,aux;
if(i<=n/2)
{
ind=indvalmin(i,n);
if(v[i]>v[ind])
{
aux=v[i];
v[i]=v[ind];
v[ind]=aux;
combinare(ind,n);
}
}
}
void minheap()
{
for(i=n/2;i>=1;i--)
combinare(i,n);
}
void heapsort()
{
long long aux;
minheap();
for(i=n;i>=1;i--)
{
aux=v[i];
v[i]=v[1];
v[1]=aux;
combinare(1,i-1);
}
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
heapsort();
for(i=n;i>=1;i--)
fout<<v[i]<<" ";
fin.close();
fout.close();
return 0;
}