Cod sursa(job #2075498)

Utilizator AnduRazvanMindrescu Andu AnduRazvan Data 25 noiembrie 2017 14:40:31
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n,a[500001],x,z;

void InsHeap(int x)
{ a[++z]=x;
  int ct=z;
  while(a[ct>>1]>a[ct]) {swap(a[ct>>1],a[ct]);ct=ct>>1;}
}
void Heapsort(int nr)
{ if(nr==0) return;
    fout<<a[1]<<" ";
  swap(a[1],a[z]);
  z--;
  int ct=1;
  while((a[ct]>a[ct<<1]&&(ct<<1)<=z)||(a[ct]>a[(ct<<1)+1]&&(ct<<1)+1<=z))
  { if((a[ct]>a[ct<<1]&&(ct<<1)<=z)&&(a[ct]>a[(ct<<1)+1]&&(ct<<1)+1<=z))
           {if(a[ct<<1]<a[(ct<<1)+1]) {swap(a[ct],a[ct<<1]);ct=ct<<1;}
            else {swap(a[ct],a[(ct<<1)+1]);ct=(ct<<1)+1;}
           }
     else if (a[ct]>a[ct<<1]&&(ct<<1)<=z) {swap(a[ct],a[ct<<1]);ct=ct<<1;}
     else if (a[ct]>a[(ct<<1)+1]&&(ct<<1)+1<=z) {swap(a[ct],a[(ct<<1)+1]);ct=(ct<<1)+1;}
   if((ct<<1)>n) break;
  }

  Heapsort(z);
}
int main()
{ fin>>n;
  int i;
  for(i=1;i<=n;i++)
   {fin>>a[i];
   InsHeap(a[i]);
   }
   Heapsort(z);
    return 0;
}