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 ?