Cod sursa(job #2288636)

Utilizator pasoi_stefanPasoi Stefan pasoi_stefan Data 23 noiembrie 2018 18:31:19
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include<fstream>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int n,a[500005];
void downheap(int k,int n){
    int nod;
    do{
        nod=0;
        if(2*k<=n){
            nod=2*k;
            if(2*k+1<=n && a[2*k+1]>a[2*k])
                nod=2*k+1;
            if(a[k]>a[nod])
                nod=0;
        }
        if(nod){
            swap(a[k],a[nod]);
            k=nod;
        }
    }while(nod);
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=n/2;i>=1;i--)
        downheap(i,n);
    for(int i=n;i>=2;i--){
        swap(a[1],a[i]);
        downheap(1,i-1);
    }
    for(int i=1;i<=n;i++)
        cout<<a[i]<<' ';
}