Язык Си в примерах/Сортировка на основе qsort
Внешний вид
- Компиляция программ
- Простейшая программа «Hello World»
- Учимся складывать
- Максимум
- Таблица умножения
- ASCII-коды символов
- Верхний регистр
- Скобочки
- Факториал
- Степень числа
- Треугольник Паскаля
- Корень уравнения
- Система счисления
- Сортировка
- Библиотека complex
- Сортировка на основе qsort
- RPN-калькулятор
- RPN-калькулятор на Bison
- Простая грамматика
- Задача «Расчёт сопротивления схемы»
- Простая реализация конечного автомата
- Использование аргументов командной строки
- Чтение и печать без использования stdio
- Декодирование звукозаписи в формате ADX
- Другие примеры
- XCC C
Пример использования функции 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(void)
{
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,
учитывая символ конца строки */
base[i].name = malloc((strlen(name)+1) * 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;
}