#include <stdio.h>
#include <stdlib.h>
 
typedef struct {
    double x;
    double y;
} data2d;
 
 
int
comp (const void *p1, const void *p2)
{
    const data2d d1 = *(const data2d*)p1;
    const data2d d2 = *(const data2d*)p2;
    double x1 = d1.x,y1 = d1.y,x2 = d2.x, y2 = d2.y;
    
    if( x1 < x2 ) return -1;
    if( x1 > x2 ) return 1;
    if( y1 < y2 ) return -1;
    if( y1 > y2 ) return 1;
    return 0;
}
 
int main()
{
 
    int i = 0;
    data2d *xy = calloc(10, sizeof*xy);
 
    xy[0].x = 1.2;      xy[0].y = 1.019;
    xy[1].x = 2.02;     xy[1].y = 33.98;
    xy[2].x = 3.25;     xy[2].y = 321.2;
    xy[3].x = 5.11;      xy[3].y = 105.1;
    xy[4].x = 5.11;     xy[4].y = 78.77;
    xy[5].x = 3.42;     xy[5].y = 658.5;
    xy[6].x = 3.42;     xy[6].y = 688.8;
    xy[7].x = 21.2;     xy[7].y = 1.081;
    xy[8].x = 100.2;    xy[8].y = 132.4;
    xy[9].x = 19.2;     xy[9].y = 1.157;
 
    printf("before qsort()\n");
    printf("==============\n");
    for (i=0; i<10; i++)
        printf("xy[%d].x = %.3f   xy[%d].y = %.3f\n", i, xy[i].x, i, xy[i].y);
 
    qsort(xy, 10, sizeof*xy, comp);
 
    printf("after qsort()\n");
    printf("==============\n");
    for (i=0; i<10; i++)
        printf("xy[%d].x = %.3f   xy[%d].y = %.3f\n", i, xy[i].x, i, xy[i].y);
 
    free(xy);
    return 0; 
}
