В большинстве прикладных программ, в которых используется сортировка, предусмотрена сортировка структур данных. Например, списки почтовой рассыпки, складские базы данных и журналы сотрудников содержат наборы разнотипных данных. В программах на языке С совокупности данных обычно хранятся в структурах. Хотя структура обычно содержит несколько членов, структуры, как правило, сортируются только по одному получлену, который используется в качестве ключа сортировки. За исключением выбора ключа, приемы сортировки структур ничем не отличаются от приемов сортировки других типов данных.
Чтобы проиллюстрировать пример сортировки структур, создадим структуру под называнием address, в которой можно хранить почтовый адрес. Подобная структура может применяться в программе почтовой рассылки. Описание структуры address показано ниже:
struct address   {
char name[40]; .
/*  имя  */
char street[40];
/*  улица  */
char city[20];
/*   город  */
char state[3];
/*  штат   */
char zip[ll];
/* индекс */
};
Поскольку представляется разумным организовать список адресов в виде массива структур, в данном примере предположим, что процедура сортировки будет сортиро¬вать массив структур типа address. Такая процедура показана ниже. Она сортирует адреса по почтовому индексу.
/*  Быстрая  сортировка  структур  типа  address.   */ 
void quick_struct(struct  address  items[],  int  count)
{
qs_ struct(items,0,count-l) ;
}
void qs_struct(struct address items[], int left, int right)
register int i, j;
char *x;
struct address temp;
i = left; j = right;
x = items [ (left+fright)/2] . zip; /* сортировка по почтовому индексу */
do {
while({strcmp(items[i].zip,x) < 0) && (i < right}) i++; while((strcmp(items[j].zip,x) > 0) && (j > left)) j--; 
if(i <= j) {
temp = items[i];
items[i] = items[j];
items[j] = temp;
}
} while(i <= j) ;
if(left < j) qs_struct(items, left, j);
 if(i < right) qs_struct(items, i, right);
}