home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_11_04
/
1104109b
< prev
next >
Wrap
Text File
|
1993-02-05
|
2KB
|
72 lines
/* sort4.c: Sort structures via pointers */
#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}};
struct person *some_ptrs[NELEMS] =
{some_people,some_people+1,some_people+2,some_people+3};
qsort(some_ptrs, NELEMS, sizeof some_ptrs[0], name_comp);
puts("By name:");
for (i = 0; i < NELEMS; ++i)
printf("%s, %s, %s %d\n",
some_ptrs[i]->last,
some_ptrs[i]->first,
some_ptrs[i]->phone,
some_ptrs[i]->age);
qsort(some_ptrs, NELEMS, sizeof some_ptrs[0], age_comp);
puts("\nBy age:");
for (i = 0; i < NELEMS; ++i)
printf("%s, %s, %s %d\n",
some_ptrs[i]->last,
some_ptrs[i]->first,
some_ptrs[i]->phone,
some_ptrs[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;
}