Pagini recente » Cod sursa (job #2922357) | Cod sursa (job #1668621) | Cod sursa (job #2777352) | Cod sursa (job #517832) | Cod sursa (job #661195)
Cod sursa(job #661195)
#include<stdio.h>
#define nmax 200020
int heap[nmax],lg_heap;
void add(int &lg_heap,int num){
++lg_heap;
int ppoz=lg_heap;
while(ppoz>1 && num<heap[ppoz/2]){
heap[ppoz]=heap[ppoz/2];
ppoz=ppoz/2;
}
heap[ppoz]=num;
}
void del(int &lg_heap,int ppoz,int num){
heap[ppoz]=heap[lg_heap];
lg_heap--;
int test,pfiu;
do{
test=0;
if(ppoz*2<=lg_heap){
pfiu=ppoz*2;
if(pfiu+1<=lg_heap && heap[pfiu]>heap[pfiu+1])
pfiu++;
if( heap[pfiu]<heap[ppoz])
test=1;
}
if(test!=0){
heap[ppoz]=heap[pfiu];
heap[pfiu]=heap[lg_heap+1];
ppoz=pfiu;
}
}while(test);
}
int main(){
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int n,x;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
add(lg_heap,x);
}
for(int i=1;i<=n;i++){
printf("%d ",heap[1]);
del(lg_heap,1,heap[1]);
}
return 0;
}