Pagini recente » Cod sursa (job #1882503) | Cod sursa (job #2247984) | Rating Sabin Cotoroi (ackermann20th) | Cod sursa (job #1320144) | Cod sursa (job #960017)
Cod sursa(job #960017)
#include <stdio.h>
#include <stdlib.h>
int v[1000002],n;
FILE *f,*g;
int div1(int a,int b)
{
return (int)(a/b);
}
void adaugare_heap(int i,int nr)
{
v[i]=nr;
int tat,aux;
tat=div1(i,2);
while((v[i]>v[tat])&&(i!=1))
{
aux=v[i];
v[i]=v[tat];
v[tat]=aux;
i=tat;
tat=div1(tat,2);
}
}
int idmax(int i)
{
if(v[2*i]>v[2*i+1])
return 2*i;
else
return 2*i+1;
}
void restruct_heap()
{
fprintf(g,"%d ",v[1]);
v[1]=v[n];
n--;
int aux=1;
int aux1=0;
while(aux<n)
{
int id=idmax(aux);
if(v[aux]<v[id])
{
aux1=v[aux];
v[aux]=v[id];
v[id]=aux1;
aux=id;
}
else
break;
}
}
void creare_heap()
{
int i,nr;
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&nr);
adaugare_heap(i,nr);
}
int n1=n;
while(n>0)
{
restruct_heap();
}
}
void afisare()
{
int i;
for(i=1;i<=n;i++)
printf("%d ",v[i]);
}
int main()
{
f=fopen("algsort.in","r");
g=fopen("algsort.out","w");
creare_heap();
afisare();
fclose(f);
fclose(g);
}