Cod sursa(job #1850954)

Utilizator teoionescuIonescu Teodor teoionescu Data 19 ianuarie 2017 04:42:06
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
class Heap{
private:
    int A[500001],K;
    void rep(int i,int j){
        swap(A[i],A[j]);
    }
    void upheap(int i){
        if(i/2 && A[i] < A[i/2]){
            rep(i/2,i);
            upheap(i/2);
        }
    }
    void downheap(int i){
        if(2*i+1<=K && A[2*i+1] < A[i] && A[2*i+1]<=A[2*i]){
            rep(i,2*i+1);
            downheap(2*i+1);
        }
        else if(2*i<=K && A[2*i] < A[i]){
            rep(i,2*i);
            downheap(2*i);
        }
    }
public:
    void insert(int x){
        A[++K]=x;
        upheap(K);
    }
    void pop(){
        rep(1,K);
        K--;
        downheap(1);
    }
    int top(){
        return A[1];
    }
} H;

int main(){
    int n;in>>n;
    for(int i=1;i<=n;i++){
        int x;in>>x;
        H.insert(x);
    }
    for(int i=1;i<=n;i++){
        int x=H.top(); H.pop();
        out<<x<<' ';
    }
    return 0;
}