Pagini recente » Cod sursa (job #1127103) | Cod sursa (job #976108) | Cod sursa (job #1753904) | Cod sursa (job #1418410) | Cod sursa (job #659122)
Cod sursa(job #659122)
#include<stdio.h>
#define dimensiune 500001
using namespace std;
int heap[dimensiune],n;
void swap(int &a,int &b)
{
int aux;
aux=a;
a=b;
b=aux;
}
void max_heapify_down(int nr,int i) // reface arborele pentru a fi structura de heap
{
int l,r,largest;
l=i<<1;
r=l+1;
largest=i;
if(l<=nr&&heap[l]>heap[i])
largest=l;
if(r<=nr&&heap[r]>heap[largest])
largest=r;
if(largest!=i)
{
swap(heap[i],heap[largest]);
max_heapify_down(nr,largest);
}
}
void build_max_heap()
{
int i;
for(i=n>>1;i>=1;i--)
max_heapify_down(n,i);
}
void heapsort()
{
int i,nre=n;
build_max_heap();
for(i=nre;i>=2;i--)
{
swap(heap[1],heap[i]);
nre--;
max_heapify_down(nre,1); // sau build_max_heap(r,nr);
}
}
int main()
{
int i;
FILE *c,*d;
c=fopen("algsort.in","r");
d=fopen("algsort.out","w");
fscanf(c,"%d",&n);
for(i=1;i<=n;i++)
fscanf(c,"%d",&heap[i]);
heapsort();
for(i=1;i<=n;i++)
fprintf(d,"%d ",heap[i]);
fclose(c);
fclose(d);
}