Salve a tutti,
ho il seguente codice:
codice:
#include <stdio.h>
#define MAX 20
int sinistro(int i)
{
return 2*i+1;
}
int destro(int i)
{
return 2*i+2;
}
int padre(int i)
{
return (int)(i-1/2);
}
stampavettore(int *vettore,int n)
{
int i;
for(i=0 ; i<=n ;
printf("%d ",vettore[i++]));
}
int riempivettore(int *vettore)
{
int i;
i=0;
do {
printf("%d\n", i);
printf("inserire l'elemento %d dell'array('-1' per terminare): ",i+1);
scanf("%d",vettore+i);
stampavettore(vettore,i);
printf("\n");
} while (vettore[i++] != -1);
return i-2;
}
void scambia(int *n1,int *n2)
{
int temp;
temp = *n1;
*n1 = *n2;
*n2 = temp;
}
void heapify(int *vettore, int i,int heapsize)
{
int l,r,maggiore;
l = sinistro(i);
r = destro(i);
if ((l <= heapsize) && (vettore[l] > vettore[i]))
{
maggiore = l;
}
else
{
maggiore = i;
}
if ((r <= heapsize) && (vettore[r]>vettore[maggiore]))
{
maggiore = r;
}
if (maggiore != i)
{
scambia(&vettore[i],&vettore[maggiore]);
heapify(vettore,maggiore,heapsize);
}
}
void buildheap(int *vettore,int heapsize,int n)
{
int i;
for (i=(int)(n/2) ; i>=0 ; i--)
{
heapify(vettore,i,heapsize);
}
}
heapsort(int *vettore,int n)
{
int i,heapsize;
heapsize=n;
buildheap(vettore,heapsize,n);
for (i=n ; i>0 ; i--)
{
scambia(&vettore[0],&vettore[i]);
heapsize--;
heapify(vettore,0,heapsize);
}
}
main()
{
int vettore[MAX];
int n; /*numero di elementi*/
n=riempivettore(vettore);
printf("Valore di n %d\n", n);
heapsort(vettore,n);
stampavettore(vettore,n);
}
non riesco a capire perchè in questa funzione:
void buildheap(int *vettore,int heapsize,int n)
vengono passati i valori heapsize ed n, che sono sempre uguali.
Credo che ci sarà un motivo, grazie a chiunque mi vuol dare una mano.
Ciao