Cod sursa(job #407950)

Utilizator PopaStefanPopa Stefan PopaStefan Data 2 martie 2010 19:06:04
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
//Algoritmul de sortare cu ansamble (heap-uri)
#include<fstream>
#include<math.h>
#define nmax 500001

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

unsigned int a[nmax],n;

void afisare()
{for(unsigned int i=1;i<=n;i++)
  fout<<a[i]<<" ";
}

void creare_heap()
{unsigned int i,x;
unsigned int fiu,tata;
fin>>n;
for(i=1;i<=n;i++)
  {fin>>x;
   fiu=i;
   tata=fiu/2;
   while(a[tata]<x && tata>=1)
      {a[fiu]=a[tata];
       fiu=tata;
       tata=fiu/2;
      }
   a[fiu]=x;
  }
}

void update_heap(unsigned int i)
{unsigned int tata,fiu,aux;
tata=1;
fiu=2;
while(fiu<=i)
    {if(fiu+1<=i && a[fiu+1]>a[fiu])
       fiu++;
     if(a[tata]<a[fiu])
        {aux=a[tata];
         a[tata]=a[fiu];
         a[fiu]=aux;
         tata=fiu;
         fiu=2*tata;
        }
       else break;
    }
}

void heap_sort()
{unsigned int i,aux;
for(i=n;i>1;i--)
   {aux=a[i];
   a[i]=a[1];
   a[1]=aux;
   update_heap(i-1);
   }
}

int main()
{creare_heap();
heap_sort();
afisare();
fin.close();
fout.close();
return 0;
}