Ciao a tutti!
vi scrivo questa notte dopo ore perse cercando di capire dove sia l'errore... Il mio professore di algoritmi e strutture dati ci ha fatto vedere qualche esempio di "algoritmi generici" come li ha chiamati lui, ovvero algoritmi di ordinamento o di ricerca di vettori di qualunque tipo di dato. Invece di usare puntatori a void come impone il buon senso, utilizza puntatori a char perchè sono di piccole dimensioni e perchè "ai suoi tempi non c'erano i puntatori a void". Ma lasciando stare questo, vi posto il codice:
codice:
#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define MAX 6
void bubblesort(char*,int,int,int (*)());
int icompare(char*, char*);
void printvett(int*, int);
int main()
{
int a[]={3,5,1,4,2,6};
char *vet = (char*)a;
printvett(a,MAX);
bubblesort(vet,MAX,4,(*icompare));
printvett(a,MAX);
return 0;
}
void printvett(int *vet, int dim)
{
int i;
putchar('\n');
for(i=0; i<dim; i++)
{
printf("%d ",vet[i]);
}
putchar('\n');
}
int icompare(char *w1, char *w2)
{
int *ia, *ib;
ia = (int *) w1;
ib = (int *) w2;
if(*ia==*ib) return 0;
return ((*ia>*ib)?-1:1);
}
void bubblesort(char *v, int dim, int size, int (*compare)())
{
char *w;
int flag = FALSE;
int i,j;
char tmp;
while(!flag)
{
dim--;
flag = TRUE;
w=v;
for(i=0; i<dim; i++)
if((*compare)(w,w+size)>0)
{
for(j=0; j<size; j++)
{
tmp = w[j];
w[j] = w[j+size];
w[j+size] = tmp;
}
flag = FALSE;
}
}
}
Il programma funziona in questo modo, il bubblesort si appoggia ad una funzione che faccia il confronto fra due elementi del vettore. Il problema nasce nel main, ovvero non riesco a richiamare correttamente il bubble sort: la funzione si aspetta un puntatore a char, e ovviamente se faccio il cast da puntatore a int a char perdo delle informazioni, infatti compila senza warning, fa uno scambio solo ed esce dal ciclo... qualcuno riesce ad aiutarmi? :/