Provided by: manpages-ru-dev_4.17.0-2_all
ИМЯ
qsort, qsort_r - сортировка массива
LIBRARY
Standard C library (libc, -lc)
СИНТАКСИС
#include <stdlib.h> void qsort(void base[.size * .nmemb], size_t nmemb, size_t size, int (*compar)(const void [.size], const void [.size])); void qsort_r(void base[.size * .nmemb], size_t nmemb, size_t size, int (*compar)(const void [.size], const void [.size], void *), void *arg); Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)): qsort_r(): _GNU_SOURCE
ОПИСАНИЕ
Функция qsort() сортирует массив из nmemb размером size. Аргумент base указывает на начало массива. Содержимое массива сортируется в соответствии с функцией сравнения, на которую ссылается compar, вызываемой вместе с двумя аргументами, которые ссылаются на сравниваемые объекты. Функция сравнения должна вернуть целое, меньшее, равное и большее нуля для случаев, когда первый аргумент меньше, равен или больше второго соответственно. Если оба элемента сравнения равны, порядок их сортировки в массиве не будет определен. Функция qsort_r() идентична qsort(), за исключением того, что в функцию сравнения compar добавлен третий аргумент. Указатель передаётся в функцию сравнения через аргумент arg. Таким образом, функции сравнения не требуется глобальные переменные для передачи произвольных аргументов, и поэтому она реентерабельна и её можно безопасно использовать в нитях.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функции qsort() и qsort_r() ничего не возвращают.
ВЕРСИИ
qsort_r() was added in glibc 2.8.
АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7). ┌───────────────────────────────────────────────────────┬──────────────────────┬──────────┐ │Интерфейс │ Атрибут │ Значение │ ├───────────────────────────────────────────────────────┼──────────────────────┼──────────┤ │qsort(), qsort_r() │ Безвредность в нитях │ MT-Safe │ └───────────────────────────────────────────────────────┴──────────────────────┴──────────┘
СТАНДАРТЫ
qsort(): POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.
ЗАМЕЧАНИЯ
Для сравнения C-строк в качестве функции сравнения можно использовать strcmp(3), как это указано ниже.
ПРИМЕРЫ
Для примера использования смотрите пример, указанный в bsearch(3). Еще один пример программы, сортирующей строки, переданные в качестве аргументов через командную строку: #include <stdio.h> #include <stdlib.h> #include <string.h> static int cmpstringp(const void *p1, const void *p2) { /* The actual arguments to this function are "pointers to pointers to char", but strcmp(3) arguments are "pointers to char", hence the following cast plus dereference. */ return strcmp(*(const char **) p1, *(const char **) p2); } int main(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "Usage: %s <string>...\n", argv[0]); exit(EXIT_FAILURE); } qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp); for (size_t j = 1; j < argc; j++) puts(argv[j]); exit(EXIT_SUCCESS); }
СМ. ТАКЖЕ
sort(1), alphasort(3), strcmp(3), versionsort(3)
ПЕРЕВОД
Русский перевод этой страницы руководства был сделан Artyom Kunyov <artkun@guitarplayer.ru>, Azamat Hackimov <azamat.hackimov@gmail.com>, Konstantin Shvaykovskiy <kot.shv@gmail.com> и Yuri Kozlov <yuray@komyakino.ru> Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.