Hello, I need to sort an array of pointers to structures. The structure is as follows :
The array has to sorted based on some condition. We compare either the coord[0] values , coord[1] values or coord[2] values. So I wrote three functions.Code:typedef struct vector { double coord[3]; };
Now let's say the array of pointers is pointed to by parent_vpa. So I wrote :Code:int cmp_coord_x(const void *vpa, const void *vpb) { const vector *va = vpa; const vector *vb = vpb; return (va->coord[0] < va->coord[0] ? -1 : vb->coord[0] > vb->coord[0]); } int cmp_coord_y(const void *vpa, const void *vpb) { const vector *va = vpa; const vector *vb = vpb; return (va->coord[1] < va->coord[1] ? -1 : vb->coord[1] > vb->coord[1]); } int cmp_coord_z(const void *vpa, const void *vpb) { const vector *va = vpa; const vector *vb = vpb; return (va->coord[2] < va->coord[2] ? -1 : vb->coord[2] > vb->coord[2]); }
I'm still getting the unsorted list. Have I made a mistake somewhere ?Code:/* axis is used as criterion on how we sort the array */ if (axis == 0) { qsort(parent_vpa, sizeof parent_vpa/ sizeof *parent_vpa, sizeof *parent_vpa, cmp_coord_x); } if (axis == 1) { qsort(parent_vpa, sizeof parent_vpa/ sizeof *parent_vpa, sizeof *parent_vpa, cmp_coord_y); } if (axis == 2) { qsort(parent_vpa, sizeof parent_vpa/ sizeof *parent_vpa, sizeof *parent_vpa, cmp_coord_z); }



LinkBack URL
About LinkBacks



