Pagini recente » Cod sursa (job #643244) | Cod sursa (job #2624596) | Cod sursa (job #760037) | Cod sursa (job #1023649) | Cod sursa (job #1255329)
/// heap sort cu heap iterativ, de mana
#include<cstdio>
const int N=500000;
const int INF=(1<<31)-1;
int min(int a,int b){
if(a<b)
return a;
return b;
}
class MinHeap{
public:
int v[2*N+2];
int l;
bool empty(){
return l==0;
}
int top(){
return v[1];
}
void push(int x){
v[++l]=x;
int p=l;
upHeap(l);
}
void pop(){
bool f=true;
v[1]=v[l--];
downHeap(1);
}
private:
void change(int p1,int p2){
int aux=v[p1];
v[p1]=v[p2];
v[p2]=aux;
}
void upHeap(int p){
if(p<=1)
return;
if(v[p]<v[p/2]){
change(p,p/2);
upHeap(p/2);
}
}
void downHeap(int p){
if(p*2+1<=l){
if(min(v[p*2],v[p*2+1])<v[p])
if(v[p*2]<v[p*2+1]){
change(p,p*2);
downHeap(p*2);
}
else{
change(p,p*2+1);
downHeap(p*2+1);
}
}
else
if(p*2<=l)
if(v[p*2]<v[p]){
change(p,p*2);
downHeap(p*2);
}
}
};
MinHeap h;
int n;
int main(){
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
int nr;
scanf("%d",&nr);
h.push(nr);
}
int op=0;
while(!h.empty()){;
op++;
if(op==100001){
op++;
op--;
}
printf("%d ",h.top());
h.pop();
}
return 0;
}