Раздел «Язык Си».QSortSample:

Пример использования функции qsort из stdlib

Вход: В первой строчке дано N, а затем следует N строчек вида ИМЯ ТЕЛЕФОН

Выход: Выведите телефонный справочник в алфавитном порядке и в порядке возрастания телефонных номеров.

#include <stdio.h>
#include <stdlib.h>
 
typedef struct person_t {
   char *name;
   int phone;
} person_t;
 
int namecmp(const void* a, const void* b);
int phonecmp(const void* a, const void* b);
 
 
int main() {
   char name[1000];
   person_t *base;
   int n, i, phone;
   scanf("%d", &n);
   base = malloc(n * sizeof(person_t));

   /* Считываем телефонную базу */
   for (i = 0 ; i < n ; i++) {
       scanf("%s%d", name, &phone);
       base[i].name = malloc(strlen(name) * sizeof(char));
       strcpy(base[i].name, name);
       base[i].phone = phone;
   }
 
   qsort(base, n, sizeof(person_t), namecmp);
   /* Напечатаем в алфавитном порядке */
   for(i = 0 ; i < n ; i++) {
       printf("%20s %d\n", base[i].name, base[i].phone);
   }
    
 
   qsort(base, n, sizeof(person_t), phonecmp);
   /* Напечатаем в порядке возрастания номеров*/
   for (i = 0 ; i < n ; i++) {
       printf("%20s %d\n", base[i].name, base[i].phone);
   }
 
   /* Освобождаем выделенную память */
 
   for (i = 0 ; i < n ; i++) {
       free(base[i].name);
   }
   free(base);
 
   return 0;
 
}
 
int namecmp(const void* a, const void* b) {
    person_t *pa = a;
    person_t *pb = b;
    return strcmp(pa->name, pb->name);
}
int phonecmp(const void* a, const void* b) {
    person_t *pa = a;
    person_t *pb = b;
    return pa->phone - pb->phone;
}