home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_11_04 / 1104109a < prev    next >
Text File  |  1993-02-05  |  2KB  |  83 lines

  1. /* sort3.c: Sort structures */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. #define NELEMS 4
  8.  
  9. struct person
  10. {
  11.     char last[16];
  12.     char first[11];
  13.     char phone[13];
  14.     int age;
  15. };
  16.  
  17. static int name_comp(const void *, const void *);
  18. static int age_comp(const void *, const void *);
  19.  
  20. main()
  21. {
  22.     size_t i;
  23.     static struct person some_people[NELEMS] =
  24.       {{"Lincoln","Abraham","555-1865",161},
  25.        {"Ford","Henry","555-1903",98},
  26.        {"Ford","Edsel","555-1965",53},
  27.        {"Trump","Donald","555-1988",49}};
  28.  
  29.     qsort(some_people, NELEMS, sizeof some_people[0], name_comp);
  30.  
  31.     puts("By name:");
  32.     for (i = 0; i < NELEMS; ++i)
  33.         printf("%s, %s, %s %d\n",
  34.           some_people[i].last,
  35.           some_people[i].first,
  36.           some_people[i].phone,
  37.           some_people[i].age);
  38.  
  39.     qsort(some_people, NELEMS, sizeof some_people[0], age_comp);
  40.  
  41.     puts("\nBy age:");
  42.     for (i = 0; i < NELEMS; ++i)
  43.         printf("%s, %s, %s %d\n",
  44.           some_people[i].last,
  45.           some_people[i].first,
  46.           some_people[i].phone,
  47.           some_people[i].age);
  48.     return 0;
  49. }
  50.  
  51. static int name_comp(const void *p1, const void *p2)
  52. {
  53.     struct person *sp1 = (struct person *) p1;
  54.     struct person *sp2 = (struct person *) p2;
  55.     int order = strcmp(sp1->last,sp2->last);
  56.  
  57.     if (order == 0)
  58.        order = strcmp(sp1->first,sp2->first);
  59.     return order;
  60. }
  61.  
  62. static int age_comp(const void *p1, const void *p2)
  63. {
  64.     struct person *sp1 = (struct person *) p1;
  65.     struct person *sp2 = (struct person *) p2;
  66.  
  67.     return sp1->age - sp2->age;
  68. }
  69.  
  70. /* Output:
  71. By name:
  72. Ford, Edsel, 555-1965 53
  73. Ford, Henry, 555-1903 98
  74. Lincoln, Abraham, 555-1865 161
  75. Trump, Donald, 555-1988 49
  76.  
  77. By age:
  78. Trump, Donald, 555-1988 49
  79. Ford, Edsel, 555-1965 53
  80. Ford, Henry, 555-1903 98
  81. Lincoln, Abraham, 555-1865 161
  82. */
  83.