Pagini recente » Cod sursa (job #761681) | Cod sursa (job #2478957) | Cod sursa (job #3261951) | Cod sursa (job #2063457) | Cod sursa (job #1049816)
#include<algorithm>
#include<fstream>
#define maxn 500005
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");
int h[maxn],n;
void down_heap(int n,int k){
int son=1;
while(son){
son=0;
if(2*k<=n){
son=2*k;
if(2*k+1<=n && h[2*k+1]<h[2*k]) son=2*k+1;
if(h[son]<h[k]){
swap(h[son],h[k]);
k=son;
}
else son=0;
}
}
}
void up_heap(int n,int k){
int q=h[k];
while((k>1) && q<h[k/2]){
h[k]=h[k/2];
k/=2;
}
h[k]=q;
}
void delete_heap(int &n,int k){
h[k]=h[n--];
if((k>1) && h[k]<h[k/2]) up_heap(n,k);
else down_heap(n,k);
}
void creare_min_heap(int n){
int i;
for(i=1;i<=n;i++) fi>>h[i];
for(i=n/2;i>0;i--) down_heap(n,i);
}
void heapsort(int &n){
int i,l=n;
for(i=1;i<=l;i++){
fo<<h[1]<<" ";
delete_heap(n,1);
}
}
int main(){
fi>>n;
creare_min_heap(n);
heapsort(n);
fi.close();
fo.close();
return 0;
}