Cod sursa(job #770113)

Utilizator ion824Ion Ureche ion824 Data 21 iulie 2012 23:55:19
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<fstream>
using namespace std;
int h[500005],hp;

void downheap(int k){
     int nod=1;
     while(nod)
     {
      nod=0;
      if(2*k<=hp)
      {
      nod=2*k;
      if(nod+1<=hp && h[nod]<h[nod+1])++nod;
      if(h[nod]<h[k])nod=0;
      }
      if(nod)
      {
       h[k]=(h[k]^h[nod])^(h[nod]=h[k]);
       k=nod;       
      }         
     }               
}

int main(void){
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    int N,x,i;
    fin>>N; x=N/2; hp=N;
    for(i=1;i<=N;++i)fin>>h[i];
    for(i=x;i>0;--i)
      downheap(i);
    for(i=N;i>1;--i)
    {
     h[1]=(h[1]^h[i])^(h[i]=h[1]);
     --hp;
     downheap(1);                
    }
   for(i=1;i<=N;++i)fout<<h[i]<<' ';
 return 0;   
}