J'ai une structure:Comment écrire une fonction de comparaison pour qsort de stdlib?
struct pkt_
{
double x;
double y;
double alfa;
double r_kw;
};
typedef struct pkt_ pkt;
Une table de ces structures:
pkt *tab_pkt;
tab_pkt = malloc(ilosc_pkt * sizeof(pkt));
Ce que je veux faire est de trier tab_pkt
par tab_pkt.alfa
et tab_pkt.r
:
qsort(tab_pkt, ilosc_pkt, sizeof(pkt), porownaj);
Où porownaj est une fonction de comparaison, mais comment l'écrire? Voici mon « sketch » de celui-ci:
int porownaj(const void *pkt_a, const void *pkt_b)
{
if (pkt_a.alfa > pkt_b.alfa && pkt_a.r_kw > pkt_b.r_kw) return 1;
if (pkt_a.alfa == pkt_b.alfa && pkt_a.r_kw == pkt_b.r_kw) return 0;
if (pkt_a.alfa < pkt_b.alfa && pkt_a.r_kw < pkt_b.r_kw) return -1;
}
J'ai ajouté la balise qsort, car ce problème concerne la fonction qsort predicate. Je pense que d'autres ppl utilisant qsort auront des problèmes avec ça maintenant et puis aussi. –
De même, la même fonction peut être utilisée avec bsearch(); en effet, c'est généralement une erreur si vous n'utilisez pas la même fonction de comparaison pour qsort() d'un tableau et bsearch() du même tableau - en supposant que vous utilisez les deux fonctions. –