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? :/