Pagini recente » Cod sursa (job #1862889) | Cod sursa (job #1044090) | Cod sursa (job #2454977) | Cod sursa (job #1524456) | Cod sursa (job #1979485)
#include <iostream>
#include<cstdio>
using namespace std;
int h[500001];
int nh;
void schimba (int p,int q){
int aux=h[p];
h[p]=h[q];
h[q]=aux;
}
void urca(int p){
if(p>1 && h[p]<h[p/2]){
schimba(p,p/2);
urca(p/2);
}
}
void coborare(int p){
int fs=2*p,fd=2*p+1,bun=p;
if(fs<=nh && h[fs]<h[bun])
bun=fs;
if(fd<=nh && h[fd]<h[bun])
bun=fd;
if(bun!=p){
schimba(p,bun);
coborare(bun);
}
}
void sterge(int p){
schimba(p,nh);
nh--;
urca(p);
coborare(p);
}
void adauga(int x){
h[++nh]=x;
urca(nh);
}
int main()
{
int n,x;
int i;
FILE*fin,*fout;
fin=fopen("algsort.in","r");
fout=fopen("algsort.out","w");
fscanf(fin,"%d",&n);
for(i=0;i<n;i++){
fscanf(fin,"%d",&x);
adauga(x);
}
for(i=0;i<n;i++){
fprintf(fout,"%d ",h[1]);
sterge(1);
}
return 0;
}