Pagini recente » Cod sursa (job #1261777) | Cod sursa (job #2889916) | Cod sursa (job #2813055) | Cod sursa (job #2385059) | Cod sursa (job #595094)
Cod sursa(job #595094)
#include<cstdio>
#include<vector>
#include<algorithm>
#define infile "algsort.in"
#define outfile "algsort.out"
#define n_max 500005
using namespace std;
void sift(int);
void heap();
vector <int> a(1);
int n,N;
void citeste()
{
freopen(infile,"r",stdin);
scanf("%d",&n);
int x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
a.push_back(x);
}
fclose(stdin);
}
void sort()
{
N=n;
heap();
for(int i=N;i>=2;i--)
{
swap(a[i],a[1]);
N--;
sift(1);;
}
}
void heap()
{
for(int i=N>>1;i;i--)
sift(i);
}
void sift(int k)
{
int son=k,l,r;
l=k<<1;
r=l+1;
if(l<=N && a[l] > a[k])
son = l;
if(r<=N && a[r]> a[son])
son = r;
if(son!=k)
{
swap(a[son],a[k]);
sift(son);
}
}
void afiseaza()
{
freopen(outfile,"w",stdout);
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
fclose(stdout);
}
int main()
{
citeste();
sort();
afiseaza();
return 0;
}