Cod sursa(job #1681880)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 9 aprilie 2016 19:39:52
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
# include <fstream>
//# define DIM 200010
# define DIM 500010
using namespace std;
//ifstream fin("heapuri.in");
//ofstream fout("heapuri.out");
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int v[DIM],n,i,x,k;
void add (int x){
    v[++k]=x;
    int p=k/2,c=k;
    while(p!=0){
        if(v[c]<v[p]){
            swap(v[c],v[p]);
            c=p;
            p/=2;
        }
        else
            break;
    }
}
void off(int poz){
    v[poz]=v[k--];
    int p=poz/2,c=poz;
    while(p!=0){
        if(v[c]<v[p]){
            swap(v[c],v[p]);
            c=p;
            p/=2;
        }
        else
            break;
    }
    p=poz;
    c=2*poz;
    while(c<=k){
        if(v[c]>v[c+1]&&c<k)
            c++;
        if(v[c]<v[p]){
            swap(v[c],v[p]);
            p=c;
            c*=2;
           }
        else
            break;
    }
}
int main () {
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>x;
        add(x);
    }
    for(i=1;i<=n;i++){
        fout<<v[1]<<" ";
        off(1);
    }
    return 0;
}