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 >
Wrap
Text File
|
1993-02-05
|
2KB
|
83 lines
/* 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
*/