Pagini recente » Cod sursa (job #1308108) | Cod sursa (job #2042210) | Cod sursa (job #2936600) | Cod sursa (job #2245608) | Cod sursa (job #1041976)
#include <stdio.h>
int a[500001],b[500001],n;
FILE *f,*g;
void verifica(int i)
{
int aux;
if (i/2>=1)
if (b[i]<b[i/2])
{
aux=b[i];
b[i]=b[i/2];
b[i/2]=aux;
verifica(i/2);
}
}
void corect(int i)
{
int minim,aux;
if (2*i<=n)
{
if (2*i+1<=n)
{
if (b[i]>b[2*i]||b[i]>b[2*i+1])
{
minim=2*i;
if (b[2*i+1]<b[2*i]) minim=2*i+1;
aux=b[i];
b[i]=b[minim];
b[minim]=aux;
corect(minim);
}
}
else
if (b[i]>b[2*i])
{
aux=b[i];
b[i]=b[2*i];
b[2*i]=aux;
corect(2*i);
}
}
}
int main()
{
int i;
f=fopen("algsort.in","r");
g=fopen("algsort.out","w");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
fscanf(f,"%d",&a[i]);
fclose(f);
b[1]=a[1];
for (i=2;i<=n;i++)
{
b[i]=a[i];
verifica(i);
}
while (n>0)
{
fprintf(g,"%d ",b[1]);
b[1]=b[n];
n--;
corect(1);
}
fclose(g);
return 0 ;
}