.\" -*- coding: UTF-8 -*- '\" t .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH qsort 3 "28 июня 2025 г." "Справочные страницы Linux 6.15" .SH НАИМЕНОВАНИЕ qsort, qsort_r \- сортировка массива .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP,\ \fI\-lc\fP) .SH ОБЗОР .nf \fB#include \fP .P \fBvoid qsort(\fPsize_t n, size_t size; \fB void \fP\fIbase\fP\fB[\fP\fIn\fP\fB * \fP\fIsize\fP\fB], size_t \fP\fIn\fP\fB, size_t \fP\fIsize\fP\fB,\fP \fB typeof(int (const void [\fP\fIsize\fP\fB], const void [\fP\fIsize\fP\fB]))\fP \fB *\fP\fIcompar\fP\fB);\fP \fBvoid qsort_r(\fPsize_t n, size_t size; \fB void \fP\fIbase\fP\fB[\fP\fIn\fP\fB * \fP\fIsize\fP\fB], size_t \fP\fIn\fP\fB, size_t \fP\fIsize\fP\fB,\fP \fB typeof(int (const void [\fP\fIsize\fP\fB], const void [\fP\fIsize\fP\fB], void *))\fP \fB *\fP\fIcompar\fP\fB,\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 ОПИСАНИЕ The \fBqsort\fP() function sorts an array with \fIn\fP elements of size \fIsize\fP. The \fIbase\fP argument points to the start of the array. .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 и Kirill Rekhov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .