Pagini recente » Cod sursa (job #2304225) | Profil Gogosila_Mihai_Cristian_325CC | Cod sursa (job #2592371) | Cod sursa (job #2451471) | Cod sursa (job #1828442)
// heapsort
#include <fstream>
#define NIL 100001
using namespace std;
int a[NIL];
int heap_size;
int length;
int parent (int i)
{
return i/2;
}
int left (int i)
{
return 2*i;
}
int right (int i)
{
return 2*i+1;
}
void max_heapify (int a[NIL], int i)
{
int l=left(i);
int r=right(i);
int largest;
if(l<=heap_size && a[l]>a[i])
largest=l;
else
largest=i;
if(r<=heap_size && a[r]>a[largest])
largest=r;
if(largest!=i)
{
int aux=a[i];
a[i]=a[largest];
a[largest]=aux;
max_heapify(a,largest);
}
}
void build_max_heap (int a[NIL])
{
heap_size=length;
int i;
for(i=length/2; i>=1; i--)
max_heapify(a,i);
}
void heap_sort(int a[NIL])
{
build_max_heap(a);
int i, aux;
for(i=length;i>=2;i--)
{
aux=a[1];
a[1]=a[i];
a[i]=aux;
heap_size--;
max_heapify(a,1);
}
}
int main()
{
ifstream fin ("algsort.in");
fin>>length;
int i;
for(i=1; i<=length; i++)
fin>>a[i];
fin.close();
heap_sort(a);
ofstream fout ("algsort.out");
for(i=1; i<=length; i++)
fout<<a[i]<<'\n';
fout.close();
return 0;
}