Hello, I need to sort an array of pointers to structures. The structure is as follows :
Code:
typedef struct vector
{
double coord[3];
};
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:
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]);
}
Now let's say the array of pointers is pointed to by parent_vpa. So I wrote :
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);
}
I'm still getting the unsorted list. Have I made a mistake somewhere ?