Cod sursa(job #550745)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 9 martie 2011 21:30:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<fstream>
using namespace std;
int v[500002],n,dim;
void read()
{int i;
ifstream in("algsort.in");
in>>n;
for(i=1;i<=n;i++)
	in>>v[i];
in.close();
}
void write()
{int i;
ofstream out("algsort.out");
for(i=1;i<=n;i++)
	out<<v[i]<<" ";
out<<'\n';
}	
void reconheap(int i)
{int l,r,max,aux;
l=2*i;
r=2*i+1;
if(l<=dim&&v[l]>v[i])
	max=l;
else
	max=i;
if(r<=dim&&v[r]>v[max])
	max=r;
if(max!=i)
	{aux=v[i];
	v[i]=v[max];
	v[max]=aux;
	reconheap(max);
	}
}
void conheap()
{int i;
dim=n;
for(i=n/2;i>=1;i--)
	reconheap(i);
}
void heapsort()
{int i,aux;
conheap();
for(i=n;i>=2;i--)
	{aux=v[1];
	v[1]=v[i];
	v[i]=aux;
	dim--;
	reconheap(1);
	}
}
int main()
{read();
heapsort();
write();
return 0;
}