Provided by: manpages-ru-dev_4.17.0-2_all bug

ИМЯ

       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⟩.