Cod sursa(job #371549)

Utilizator GotenAmza Catalin Goten Data 5 decembrie 2009 19:20:24
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>

using namespace std;

long a[500000];

long ls(long k)
{
 return (k<<1);
 }
long rs(long k)
{
 return ((k<<1)+1);
 }
long f(long k)
{
 return (k>>1);
 }

void ex(long x, long y)
{
 long aux;
 aux=a[x];
 a[x]=a[y];
 a[y]=aux;
 }


void sift(long n, long k)
{
 long son;
 do
  {
   son=0;
   if(ls(k)<=n)
    {
     son=ls(k);
     if(rs(k)<=n&&a[rs(k)]<son)son=rs(k);
     if(a[son]>=a[k])son=0;
     }
   if(son)
    {
     ex(son,k);
     k=son;
     }
    }
   while(son);
 }

void bh(long n)
{
 long i;
 for(i=n>>1;i;i--)sift(n,i);
 }

void heapsort(int n)
{
	int i;
	bh(n);
	for(i=n;i>=2;i--)
	{
		ex(1,i);
		sift(i-1,1);
	}
}

int main()
{ 
	long i,n;
	ifstream f("algsort.in");
	ofstream g("algsort.out");
	f>>n;
	for(i=1;i<=n;i++)f>>a[i];
	heapsort(n);
	for(i=1;i<=n;i++)g<<a[i];
	return 0;
}