Scusami ma se non metti i tag code e indenti il codice, non riesco a leggerlo!
hai ragione, ti chiedo scusa, provo ad utilizzare i tag code
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
#define lenght 10
void heapyfy (int b[],int i);
void buildheap (int b[]);
void heapsort (int b[]);
int main(void)
{
int i;
int a[SIZE] ={4,1,3,2,16,9,10,14,8,7};
for (i=0;i<SIZE;i++)
printf("%3d\n",a[i]);
printf("----------------------------------\n");
buildheap(a);
for (i=0;i<SIZE;i++)
printf("%3d\n",a[i]);
printf("--------------------------\n");
heapsort(a);
for(i=0;i<SIZE;i++)
printf("%3d\n",a[1]);
printf("--------------------------\n");
return 0;
}
void heapyfy(int b[],int i)
{
int left, right,max;
left= 2*i+1;
right = 2*i+2;
int appoggio;
if (left<SIZE && b[left]>b[i])
max=left;
else max=i;
if (right<SIZE && b[right]>b[max])
max=right;
if (max != i)
{
appoggio=b[i];
b[i]=b[max];
b[max]=appoggio;
heapyfy(b,max);
}
}
void buildheap(int b[])
{
int i;
for (i=(lenght/2)-1 ;i>=0;i--)
heapyfy(b,i);
}
void heapsort (int b[])
{
buildheap(b);
int i, appoggio,k;
k=0;
for (i=SIZE-1;i>1;i--)
{
appoggio=b[i];
b[i]=b[k];
b[k]=appoggio;
k++;
}
heapyfy (b,k);
}
abbiamo appurato che heapify e build heap funzionano, per terminare lo studio degli heap, mi manca solo l'ordinamento heapsort.
Da quello che ho capito io (quindi molto poco:)) l'algoritmo deve seguire i seguenti passi:
1) trasformo l'array in un heap
2) creo 2 indici ed una variabile d'appoggio
3) inizio il ciclo da size-1 elemento del mio array (cioè dall'ultimo), fino al secondo elemento ed ogni volta decremento il mio indice i ( quindi parto da 9 e arrivo a 1)
4) scambio l'ultimo elemento b
con il primo elemento b[k]
5) incremento il mio k
6) ripeto la costruzione del mio heap (con paramento k e chiaramente array b)
Cosa ne pensi? ( il SIZE nella condizione del ciclo for mi sa che è cannato, ma come potrei fare?)
Grazie ancora e scusami per gli orrori