fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct {
  5. double x;
  6. double y;
  7. } data2d;
  8.  
  9.  
  10. int
  11. comp (const void *p1, const void *p2)
  12. {
  13. const data2d d1 = *(const data2d*)p1;
  14. const data2d d2 = *(const data2d*)p2;
  15. double x1 = d1.x,y1 = d1.y,x2 = d2.x, y2 = d2.y;
  16.  
  17. if( x1 < x2 ) return -1;
  18. if( x1 > x2 ) return 1;
  19. if( y1 < y2 ) return -1;
  20. if( y1 > y2 ) return 1;
  21. return 0;
  22. }
  23.  
  24. int main()
  25. {
  26.  
  27. int i = 0;
  28. data2d *xy = calloc(10, sizeof*xy);
  29.  
  30. xy[0].x = 1.2; xy[0].y = 1.019;
  31. xy[1].x = 2.02; xy[1].y = 33.98;
  32. xy[2].x = 3.25; xy[2].y = 321.2;
  33. xy[3].x = 5.11; xy[3].y = 105.1;
  34. xy[4].x = 5.11; xy[4].y = 78.77;
  35. xy[5].x = 3.42; xy[5].y = 658.5;
  36. xy[6].x = 3.42; xy[6].y = 688.8;
  37. xy[7].x = 21.2; xy[7].y = 1.081;
  38. xy[8].x = 100.2; xy[8].y = 132.4;
  39. xy[9].x = 19.2; xy[9].y = 1.157;
  40.  
  41. printf("before qsort()\n");
  42. printf("==============\n");
  43. for (i=0; i<10; i++)
  44. printf("xy[%d].x = %.3f xy[%d].y = %.3f\n", i, xy[i].x, i, xy[i].y);
  45.  
  46. qsort(xy, 10, sizeof*xy, comp);
  47.  
  48. printf("after qsort()\n");
  49. printf("==============\n");
  50. for (i=0; i<10; i++)
  51. printf("xy[%d].x = %.3f xy[%d].y = %.3f\n", i, xy[i].x, i, xy[i].y);
  52.  
  53. free(xy);
  54. return 0;
  55. }
  56.  
Success #stdin #stdout 0s 1920KB
stdin
Standard input is empty
stdout
before qsort()
==============
xy[0].x = 1.200   xy[0].y = 1.019
xy[1].x = 2.020   xy[1].y = 33.980
xy[2].x = 3.250   xy[2].y = 321.200
xy[3].x = 5.110   xy[3].y = 105.100
xy[4].x = 5.110   xy[4].y = 78.770
xy[5].x = 3.420   xy[5].y = 658.500
xy[6].x = 3.420   xy[6].y = 688.800
xy[7].x = 21.200   xy[7].y = 1.081
xy[8].x = 100.200   xy[8].y = 132.400
xy[9].x = 19.200   xy[9].y = 1.157
after qsort()
==============
xy[0].x = 1.200   xy[0].y = 1.019
xy[1].x = 2.020   xy[1].y = 33.980
xy[2].x = 3.250   xy[2].y = 321.200
xy[3].x = 3.420   xy[3].y = 658.500
xy[4].x = 3.420   xy[4].y = 688.800
xy[5].x = 5.110   xy[5].y = 78.770
xy[6].x = 5.110   xy[6].y = 105.100
xy[7].x = 19.200   xy[7].y = 1.157
xy[8].x = 21.200   xy[8].y = 1.081
xy[9].x = 100.200   xy[9].y = 132.400