Pagini recente » Cod sursa (job #208842) | Cod sursa (job #430133) | Cod sursa (job #81968) | Cod sursa (job #2569564) | Cod sursa (job #2247588)
#include <cstdio>
#define MaxN 500005
#define swap(a, b) {int aux=a; a=b; b=aux;}
using namespace std;
int N, Heap[MaxN], i, vf;
void Percolate(int i);
void Sift(int i);
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &N); vf=N;
for(i=1; i<=N; ++i) {scanf("%d", &Heap[i]); Percolate(i);}
for(i=1; i<=N; ++i){
printf("%d ", Heap[1]);
Heap[1]=Heap[vf];
--vf;
Sift(1);
}
return 0;
}
void Percolate(int i){
while(i>=2 && Heap[i]<Heap[i/2]){
swap(Heap[i], Heap[i/2]);
i/=2;
}
return;
}
void Sift(int i){
while((i*2<=vf && Heap[i]>Heap[i*2]) || (i*2+1<=vf && Heap[i]>Heap[i*2+1])){
int a;
if(Heap[i*2]<Heap[i*2+1])a=i*2;
else a=i*2+1;
swap(Heap[i], Heap[a]);
i=a;
}
return;
}