Domanda

Questa è la mia funzione di confronto:

   int compare (const void * a, const void * b)
    {
        ptnode * ia = (ptnode*)a;
        ptnode * ib = (ptnode*)b;
        return (int)(100.f*ia->x - 100.f*ib->x );
    }

e ho chiamato qsort come:

qsort(sortbase,index,sizeof(ptnode),compare);

sortbase è un array di struct mia ptnode, definito come:

typedef struct node
{
    struct node  *pre1;
    struct node  *pre2;
    struct node  *pre;
    double          x;
    double y;
    double maxlength;
} ptnode;

sortbase è come questo:

struct node * sortbase[1000];

Voglio ordinarli dal loro valore x, ma prima e dopo qsort, non c'è nulla di cambiato,

Perché? grazie in anticipo.

È stato utile?

Soluzione

La funzione di confronto riceve un puntatore ai 2 elementi necessari per confrontare. Dal momento che gli elementi sono i puntatori, le esigenze funzione di confronto per puntatore maniglia per puntatori.

int compare (const void * a, const void * b)
{
    ptnode * ia = *(ptnode**)a;
    ptnode * ib = *(ptnode**)b;
    return (int)(100.f*ia->x - 100.f*ib->x );
}

Altri suggerimenti

qsort passa compare all'indirizzo (nessun valore) di ciascun elemento della matrice, ossia passa un puntatore a un puntatore a una ptnode. È necessario modificare la prima linea di compare a:

ptnode * ia = *(ptnode**)a;

e allo stesso modo della seconda linea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top