Pagini recente » Cod sursa (job #2913265) | Cod sursa (job #1025085) | Cod sursa (job #1352974) | Cod sursa (job #737820) | Cod sursa (job #3153985)
#include <bits/stdc++.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N=500010;
int n,a[N];
void heapDown(int,int);
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>a[i];
/// asez elementele in max-heap
for(int i=n/2;i>=1;i--)
heapDown(i,n);
for(int i=n;i>=1;i--)
{
swap(a[1],a[i]);
heapDown(1,i-1);
}
for(int i=1;i<=n;i++)
g<<a[i]<<' ';
g<<'\n';
return 0;
}
void heapDown(int tata,int lg)
{
int fiu=2*tata; /// iau fiul stanga
if(fiu>lg)return; /// daca tata e frunza e ok < nu am nimic dedesupt
if(fiu<lg&&a[fiu+1]>a[fiu])fiu++;
/// daca fiul dreapta are mai mult aleg fiul dreapta
if(a[fiu]>a[tata]){swap(a[fiu],a[tata]);heapDown(fiu,lg);}
}