Pagini recente » Cod sursa (job #971490) | Cod sursa (job #261126) | Cod sursa (job #694814) | Cod sursa (job #1241889) | Cod sursa (job #1174589)
//facut acasa
#include <fstream>
#define MX 500001
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int a[MX],n;
void citire()
{
int i;
fin>>n;
for(i=1; i<=n; i++) fin>>a[i];
}
void reconstituie(int i)
{
int maxim,aux;
maxim = i;
if(2*i <= n)
{
if(a[2*i] > a[maxim])
{
maxim = 2*i;
}
}
if(2*i+1 <= n)
{
if(a[2*i+1] > a[maxim])
{
maxim = 2*i+1;
}
}
if(maxim != i)
{
aux = a[i];
a[i] = a[maxim];
a[maxim] = aux;
reconstituie(maxim);
}
}
void creare()
{
int i;
for(i=n/2; i>0; i--)
{
reconstituie(i);
}
/*for(i=1; i<=n; i++)
{
fout<<a[i]<<' ';
}*/
}
void heapsort()
{
int i,aux,m;
creare();
m=n;
for(i=n; i>1; i--)
{
aux = a[1];
a[1] = a[i];
a[i] = aux;
n--;
reconstituie(1);
}
n=m;
for(i=1; i<=n; i++) fout<<a[i]<<' ';
}
int main()
{
citire();
heapsort();
fin.close(); fout.close();
return 0;
}