Cod sursa(job #1086617)

Utilizator ion824Ion Ureche ion824 Data 18 ianuarie 2014 13:31:01
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream>
using namespace std;
const int NM = 500003;

int h[NM],hp,N;

inline void swap(int &a,int &b){
       int k = a; a=b; b=k; 
       }

void readData(int h[]){
     ifstream cin("algsort.in");
     cin>>hp; N=hp;
     for(int i=1;i<=hp;++i) cin>>h[i];
     cin.close();
     }

void writeData(int h[]){
     ofstream cout("algsort.out");
     for(int i=1;i<=N;++i) cout<<h[i]<<' ';
     cout.close();
     }

void DownHeap(int k){
     int nod;
     do{
         nod=0;
         if(2*k<=hp) 
         {
           nod=2*k;         
           if(nod<hp && h[nod+1] > h[nod]) nod++;
           if(h[k] >= h[nod]) nod=0;         
           else { swap(h[k],h[nod]); k=nod; }  
         }       
     }while(nod);
}

void BuildHeap(){
     for(int i=hp/2;i>0;--i) DownHeap(i);
     }

void HeapSort(int a[]){   
     readData(h);
     BuildHeap();
     for(int i=1;i<=N;++i)
     {
        swap(h[1],h[hp]);
        --hp;
        DownHeap(1);                       
     }
     writeData(h);
}

int main(){
 HeapSort(h);  
 return 0;   
}