Pagini recente » Cod sursa (job #3328019) | Cod sursa (job #3353548) | Diferente pentru problema/hacker3 intre reviziile 5 si 4 | Cod sursa (job #3189705) | Cod sursa (job #2075652)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n, v[500000], m;
void citire()
{
f>>n;
for(int i=1;i<=n;++i)
f>>v[i];
f.close();
}
int parent (int i)
{
return i/2;
}
int left (int i)
{
return 2*i;
}
int right (int i)
{
return 2*i+1;
}
void afisare ()
{
for(int i=1;i<=n;i++)
cout<<v[i]<<" ";
cout<<endl;
}
void maxHeapify (int i)
{
int l=left(i), r=right(i);
int mx;
if(l<=m && v[l]>v[i])
mx=l;
else
mx=i;
if(r<m && v[r]>v[mx])
mx=r;
if(mx!=i)
{
swap(v[i], v[mx]);
maxHeapify(mx);
}
}
void build()
{
m=n;
for(int i=m/2;i>=1;--i)
maxHeapify(i);
}
void heapSort ()
{
build();
for(int i=n;i>=1;--i)
{
swap(v[1],v[i]);
m--;
maxHeapify(1);
}
}
int main()
{
citire();
heapSort();
for(int i=1;i<=n;i++)
g<<v[i]<<" ";
g.close();
}