Cod sursa(job #2094038)

Utilizator DawlauAndrei Blahovici Dawlau Data 24 decembrie 2017 21:47:00
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
const int NMAX=500005;
int v[NMAX],n;
void read_data(){
    int i;
    fin>>n;
    for(i=1;i<=n;++i)
        fin>>v[i];
}
int left_son(int node){
    return 2*node;
}
int right_son(int node){
    return 2*node+1;
}
int father(int node){
    return node/2;
}
void sift(int node,int nr_els){
    int max_son=1;
    while(max_son){
        max_son=0;
        if(left_son(node)<=nr_els){
            max_son=left_son(node);
            if(right_son(node)<=nr_els and v[max_son]<v[right_son(node)])
                max_son=right_son(node);
            if(v[node]>v[max_son])
                max_son=0;
        }
        if(max_son){
            swap(v[node],v[max_son]);
            node=max_son;
        }
    }
}
void create_heap(){
    int i;
    for(i=n/2;i>=1;--i)
        sift(i,n);
}
void heap_sort(){
    int i;
    for(i=n;i>1;--i){
        swap(v[i],v[1]);
        sift(1,i-1);
    }
}
void print(){
    int i;
    for(i=1;i<=n;++i)
        fout<<v[i]<<' ';
}
int main(){
    read_data();
    create_heap();
    heap_sort();
    print();
}