Pagini recente » Cod sursa (job #415402) | Cod sursa (job #2146266) | Cod sursa (job #2403683) | Cod sursa (job #373163) | Cod sursa (job #2247558)
#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((Heap[i]>Heap[i*2] && i*2<=vf) || (Heap[i]>Heap[i*2+1] && i*2+1<=vf)){
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;
}