qsort(3)

НАИМЕНОВАНИЕ
qsort, qsort_r - сортировка массива

БИБЛИОТЕКА
Стандартная библиотека языка C (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() ничего не возвращают.

АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение
qsort(), qsort_r() | Безвредность в нитях | MT-Safe

СТАНДАРТЫ

qsort()
    C11, POSIX.1-2008.

ИСТОРИЯ

qsort()
    POSIX.1-2001, C89, SVr4, 4.3BSD.

qsort_r()
    glibc 2.8.

ПРИМЕЧАНИЯ
Для сравнения 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> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков (<debian-l10n-russian@lists.debian.org>).