Cod sursa(job #1235078)

Utilizator delia_99Delia Draghici delia_99 Data 28 septembrie 2014 18:38:23
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n,H[500005],i;

void HeapUp(int k)
{
    if(k==1)
      return;
    else {if(H[k]>H[k/2]&&k>1)
          {
              swap(H[k],H[k/2]);
              HeapUp(k/2);
          }
         else return;}
}

void HeapDown(int k,int n)
{
    if(k==n)
      return;
    else {if(H[k]<H[k*2]&&(k*2)<=n)
          {
              swap(H[k],H[k*2]);
              HeapDown(k*2,n);
          }
          else if(H[k]<H[k*2+1]&&(k*2+1)<=n)
          {
              swap(H[k],H[k*2+1]);
              HeapDown(k*2+1,n);
          }
         else return;}
}

void HeapSort(int n)
{
    for(i=n;i>=2;i--)
      {
          swap(H[1],H[i]);
          HeapDown(1,i-1);
      }
    return;
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
      f>>H[i];
    for(i=2;i<=n;i++)
      HeapUp(i);
    HeapSort(n);
    for(i=1;i<=n;i++)
      g<<H[i]<<" ";

    return 0;
}