Facendo il controllo ho visto che non prende il valore di i.
Il programma è questo, non capisco perchè mi fa quest'errore.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 8
void converti(char s[],int a[]);
void creaheap(int a[],int dim);
void heapify(int a[],int dim,int i);
int sinistro(int i);
int destro(int i);
void scambio(int arr[],int a,int b);
void heapsort(int a[], int dim);
int main()
{ char s[10];
int i;
int arr[N];
printf("Inserisci data (nel formato gg/mm/aaaa):\n");
scanf("%s",s);
converti(s,arr);
for(i=0;i<8;i++){
arr[i]=arr[i]-48;
}
printf("\nCostruzione array:\n");
for(i=0;i<8;i++){printf("%i ",arr[i]);}
printf("\n\nArray dopo costruzione heap:\n");
creaheap(arr,N);
for(i=0;i<8;i++){printf("%i ",arr[i]);}
printf("\n\nArray ordinato con heapsort:\n");
heapsort(arr,N);
for(i=0;i<8;i++){printf("%i ",arr[i]);}
system("PAUSE");
return 0;
}
void converti(char s[],int a[]){
a[0]=s[0];
a[1]=s[1];
a[2]=s[3];
a[3]=s[4];
a[4]=s[6];
a[5]=s[7];
a[6]=s[8];
a[7]=s[9];}
int sinistro(int i){
return (2*i);
}
int destro(int i){
return (2*i+1);
}
void scambio(int a[],int x,int y){
int temp;
temp=a[x];
a[x]=a[y];
a[y]=temp;
}
void heapify(int a[],int dim,int i){
int l,r,max;
l=sinistro(i);
r=destro(i);
if (l<dim && a[l]>a[i])
max=l;
else
max=i;
if(r<dim && a[r]>a[max])
max=r;
printf("\ni=%d max=%d",i,max);
if(max !=i ){
scambio(a,i,max);
printf("\ni=%d max=%d",i,max);
heapify(a,dim,max);}
}
void creaheap(int a[],int dim){
int i;
for(i=dim/2;i>=0;i--){
heapify(a,dim,i);
}
}
void heapsort(int a[],int dim){
int i;
for(i=dim-1;i>=1;i--){
scambio(a,0,i);
dim--;
heapify(a,dim,0);
}
}