Pagini recente » Cod sursa (job #57712) | Cod sursa (job #307516) | Cod sursa (job #2309417) | Cod sursa (job #2857884) | Cod sursa (job #391112)
Cod sursa(job #391112)
#include<fstream>
#include<cstdlib>
#define MAXN 500001
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int N,heap[MAXN];
void sift_heap(int heap[],int N,int k)
{
int son,aux;
do
{
son=0;
if(2*k<=N)
{
son=2*k;
if(2*k+1<=N&&heap[2*k]<heap[2*k+1])
son=2*k+1;
if(heap[son]<=heap[k])
son=0;
}
if(son)
{
aux=heap[k];
heap[k]=heap[son];
heap[son]=aux;
k=son;
}
}
while(son);
}
void build_heap(int heap[],int N)
{
int i;
for(i=N/2;i;i--)
sift_heap(heap,N,i);
}
void heapsort()
{
int i,aux;
for(i=N;i>=2;i--)
{
aux=heap[1];
heap[1]=heap[i];
heap[i]=aux;
sift_heap(heap,i-1,1);
}
}
int main ()
{
f>>N;
int i;
for(i=1;i<=N;i++)
f>>heap[i];
build_heap(heap,N);
heapsort();
for(i=1;i<=N;i++)
g<<heap[i]<<' ';
g<<'\n';
f.close();
g.close();
return 0;
}