Pagini recente » Cod sursa (job #1420768) | Cod sursa (job #148370) | Cod sursa (job #1597788) | Cod sursa (job #2001379) | Cod sursa (job #1315540)
#include <iostream>
#include<fstream>
using namespace std;
int a[500010],heap[500010],n,dim;
void reconstitue_heap(int i)
{
int maxim;
int st=2*i;
int dr=2*i+1;
if(st<=dim && a[st] > a[i])
maxim=st;
else
maxim=i;
if(dr<=dim && a[dr] > a[maxim])
maxim=dr;
if(maxim!=i)
{
int aux=a[i];
a[i]=a[maxim];
a[maxim]=aux;
reconstitue_heap(maxim);
}
}
void build_heap()
{
dim=n;
for(int i=(n>>1);i>=1;--i)
reconstitue_heap(i);
}
void heap_sort()
{
build_heap();
for(int i=n;i>=2;--i)
{
int aux=a[1];
a[1]=a[i];
a[i]=aux;
--dim;
reconstitue_heap(1);
}
}
void afisare()
{
ofstream fout("algsort.out");
for(int i=1;i<=n;++i)
fout<<a[i]<<" ";
fout<<"\n";
fout.close();
}
void citire()
{
ifstream fin("algsort.in");
fin>>n;
for(int i=1;i<=n;++i)
fin>>a[i];
fin.close();
}
int main()
{
citire();
heap_sort();
afisare();
return 0;
}