/* sort3.c: Sort structures */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NELEMS 4
struct person
{
char last[16];
char first[11];
char phone[13];
int age;
};
static int name_comp(const void *, const void *);
static int age_comp(const void *, const void *);
main()
{
size_t i;
static struct person some_people[NELEMS] =
{{"Lincoln","Abraham","555-1865",161},
{"Ford","Henry",#555-1903",98},
{"Ford","Edsel","555-1965",53},
{"Trump","Donald","555-1988",49}};
qsort(some_people, NELEMS, sizeof some_people[0],
name_comp);
puts("By name:");
for (i = 0; i < NELEMS; ++i)
printf("%s, %s, %s %d\n",
some_people[i].last,
some_people[i].first,
some_people[i].phone,
some_people[i].age);
qsort(some_people, NELEMS, sizeof some_people[0],
age_comp);
puts("\nBy age:");
for (i = 0; i < NELEMS; ++i)
printf("%s, %s, %s %d\n",
some_people[i].last,
some_people[i].first,
some_people[i].phone,
some_people[i].age);
return 0;
}
static int name_comp(const void *p1, const void *p2)
{
struct person *sp1 = (struct person *) p1;
struct person *sp2 = (struct person *) p2;
int order = strcmp(sp1->last,sp2->last);
if (order == 0)
order= strcmp(sp1->first,sp2->first);
return order;
}
static int age_comp(const void *p1, const void *p2)
{
struct person *sp1 = (struct person *) p1;
struct person *sp2 = (struct person *) p2;
return sp1->age - sp2->age;
}
/* Output:
By name:
Ford, Edsel, 555-1965 53
Ford, Henry, 555-1903 98
Lincoln, Abraham, 555-1865 161
Trump, Donald, 555-1988 49
By age:
Trump, Donald, 555-1988 49
Ford, Edsel, 555-1965 53
Ford, Henry 555-1903 98
Lincoln, Abraham, 555-1865 161
*/
/* End of File */