Pagini recente » Cod sursa (job #32233) | Cod sursa (job #51906) | Cod sursa (job #496025) | Cod sursa (job #1716003) | Cod sursa (job #634372)
Cod sursa(job #634372)
#include<stdio.h>
#define dimensiune 500001
using namespace std;
void max_heapify(int a[dimensiune],int n,int i) // reface arborele pentru a fi structura de heap
{ int l,r,largest,aux;
l=2*i;
r=2*i+1;
largest=i;
if(l<=n&&a[l]>a[i])
largest=l;
if(r<=n&&a[r]>a[largest])
largest=r;
if(largest!=i) {
aux=a[i];
a[i]=a[largest];
a[largest]=aux;
max_heapify(a,n,largest);
}
}
void build_max_heap(int b[dimensiune],int nr_elemente)
{ int i;
for(i=nr_elemente/2;i>=1;i--)
max_heapify(b,nr_elemente,i);
}
void heapsort(int r[dimensiune],int nr)
{ int i,aux;
build_max_heap(r,nr);
for(i=nr;i>=2;i--) {
aux=r[1];
r[1]=r[i];
r[i]=aux;
nr--;
max_heapify(r,nr,1); // sau build_max_heap(r,nr);
}
}
int main()
{ int v[dimensiune],i,n;
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",&v[i]);
heapsort(v,n);
for(i=1;i<=n;i++)
fprintf(d,"%d ",v[i]);
fclose(c);
fclose(d);
}