- bullseye-backports 4.17.0-2~bpo11+1
- testing 4.17.0-2
- unstable 4.17.0-2
QSORT(3) | Руководство программиста Linux | QSORT(3) |
ИМЯ¶
qsort, qsort_r - сортировка массива
СИНТАКСИС¶
#include <stdlib.h>
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
void qsort_r(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *, void *), void *arg);
qsort_r(): _GNU_SOURCE
ОПИСАНИЕ¶
Функция qsort() сортирует массив из nmemb размером size. Аргумент base указывает на начало массива.
Содержимое массива сортируется в соответствии с функцией сравнения, на которую ссылается compar, вызываемой вместе с двумя аргументами, которые ссылаются на сравниваемые объекты.
Функция сравнения должна вернуть целое, меньшее, равное и большее нуля для случаев, когда первый аргумент меньше, равен или больше второго соответственно. Если оба элемента сравнения равны, порядок их сортировки в массиве не будет определен.
Функция qsort_r() идентична qsort(), за исключением того, что в функцию сравнения compar добавлен третий аргумент. Указатель передаётся в функцию сравнения через аргумент arg. Таким образом, функции сравнения не требуется глобальные переменные для передачи произвольных аргументов, и поэтому она реентерабельна и её можно безопасно использовать в нитях.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
Функции qsort() и qsort_r() ничего не возвращают.
ВЕРСИИ¶
Функция qsort_r() впервые появилась в 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) {
/* Аргументами данной функции являются "pointers to
pointers to char", однако аргументами strcmp(3)
являются "pointers to char", так что здесь происходит
преобразование и разыменовывание ссылок */
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 (int j = 1; j < argc; j++)
puts(argv[j]);
exit(EXIT_SUCCESS); }
СМ. ТАКЖЕ¶
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Artyom Kunyov <artkun@guitarplayer.ru>, Azamat Hackimov <azamat.hackimov@gmail.com>, Konstantin Shvaykovskiy <kot.shv@gmail.com> и Yuri Kozlov <yuray@komyakino.ru>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
1 ноября 2020 г. |