Pagini recente » Cod sursa (job #1425828) | Cod sursa (job #2048314) | Cod sursa (job #2334206) | Cod sursa (job #2796196) | Cod sursa (job #1424604)
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 500003
ifstream in("algsort.in");
ofstream out("algsort.out");
inline int ls(int i)
{
return (2*i);
}
inline int rs(int i)
{
return (2*i+1);
}
inline int father(int i)
{
return (i/2);
}
void BuildHeap(int H[],int n);
void Heapify(int H[],int i,int n);
void HeapSort(int H[],int n)
{
BuildHeap(H,n);
for( int i = n ; i > 0 ; i -- )
{
out << H[1] << " ";
swap(H[1],H[i]);
n--;
Heapify(H,1,n);
}
}
void BuildHeap(int H[],int n)
{
for(int i = n/2; i>0 ; i-- )
Heapify(H,i,n);
}
void Heapify(int H[],int i,int n)
{
int posmin,pos = i;
posmin = 1;
while(posmin)
{
posmin = pos;
if ( ls(pos) <= n && H[ls(pos)]<H[posmin] )
posmin = ls(pos);
if ( rs(pos)<= n && H[rs(pos)]<H[posmin])
posmin = rs(pos);
if ( pos!=posmin )
{
swap(H[pos],H[posmin]);
pos = posmin;
}
else
pos = 0;
}
}
int main()
{
int n,i;
in >> n;
int heap[n+1];
for( i = 1 ; i <= n ; i++)
in >> heap[i];
HeapSort(heap,n);
return 0;
}