.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk) .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" References consulted: .\" Linux libc source code .\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) .\" 386BSD man pages .\" .\" Modified 1993-03-29, David Metcalfe .\" Modified 1993-07-24, Rik Faith (faith@cs.unc.edu) .\" 2006-01-15, mtk, Added example program. .\" Modified 2012-03-08, Mark R. Bannister .\" and Ben Bacarisse .\" Document qsort_r() .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH qsort 3 "15 июня 2024 г." "Справочные страницы Linux 6.9.1" .SH ИМЯ qsort, qsort_r \- сортировка массива .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \fBvoid qsort(void \fP\fIbase\fP\fB[.\fP\fIsize\fP\fB * .\fP\fInmemb\fP\fB], size_t \fP\fInmemb\fP\fB, size_t \fP\fIsize\fP\fB,\fP \fB int (*\fP\fIcompar\fP\fB)(const void [.\fP\fIsize\fP\fB], const void [.\fP\fIsize\fP\fB]));\fP \fBvoid qsort_r(void \fP\fIbase\fP\fB[.\fP\fIsize\fP\fB * .\fP\fInmemb\fP\fB], size_t \fP\fInmemb\fP\fB, size_t \fP\fIsize\fP\fB,\fP \fB int (*\fP\fIcompar\fP\fB)(const void [.\fP\fIsize\fP\fB], const void [.\fP\fIsize\fP\fB], void *),\fP \fB void *\fP\fIarg\fP\fB);\fP .fi .P .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .P \fBqsort_r\fP(): .nf _GNU_SOURCE .fi .SH ОПИСАНИЕ Функция \fBqsort\fP() сортирует массив из \fInmemb\fP размером \fIsize\fP. Аргумент \fIbase\fP указывает на начало массива. .P Содержимое массива сортируется в соответствии с функцией сравнения, на которую ссылается \fIcompar\fP, вызываемой вместе с двумя аргументами, которые ссылаются на сравниваемые объекты. .P Функция сравнения должна вернуть целое, меньшее, равное и большее нуля для случаев, когда первый аргумент меньше, равен или больше второго соответственно. Если оба элемента сравнения равны, порядок их сортировки в массиве не будет определен. .P Функция \fBqsort_r\fP() идентична \fBqsort\fP(), за исключением того, что в функцию сравнения \fIcompar\fP добавлен третий аргумент. Указатель передаётся в функцию сравнения через аргумент \fIarg\fP. Таким образом, функции сравнения не требуется глобальные переменные для передачи произвольных аргументов, и поэтому она реентерабельна и её можно безопасно использовать в нитях. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Функции \fBqsort\fP() и \fBqsort_r\fP() ничего не возвращают. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBqsort\fP(), \fBqsort_r\fP() T} Безвредность в нитях MT\-Safe .TE .SH СТАНДАРТЫ .TP \fBqsort\fP() C11, POSIX.1\-2008. .SH ИСТОРИЯ .TP \fBqsort\fP() POSIX.1\-2001, C89, SVr4, 4.3BSD. .TP \fBqsort_r\fP() glibc 2.8. .SH ПРИМЕЧАНИЯ Для сравнения C\-строк в качестве функции сравнения можно использовать \fBstrcmp\fP(3), как это указано ниже. .SH ПРИМЕРЫ Для примера использования смотрите пример, указанный в \fBbsearch\fP(3). .P Еще один пример программы, сортирующей строки, переданные в качестве аргументов через командную строку: .P .\" SRC BEGIN (qsort.c) .EX #include #include #include \& 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 ...\[rs]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); } .EE .\" SRC END .SH "СМОТРИТЕ ТАКЖЕ" \fBsort\fP(1), \fBalphasort\fP(3), \fBstrcmp\fP(3), \fBversionsort\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Artyom Kunyov , Azamat Hackimov , Konstantin Shvaykovskiy и Yuri Kozlov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .