Pagini recente » Cod sursa (job #3202714) | Monitorul de evaluare | Cod sursa (job #157006) | Diferente pentru preoni-2006/runda-4/solutii intre reviziile 20 si 27 | Cod sursa (job #960024)
Cod sursa(job #960024)
#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])||(2*i+1>n))
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])&&(id<=n))
{
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);
}