table of contents
- bookworm 1:4.18.1-1
- bookworm-backports 1:4.24.0-2~bpo12+1
- testing 1:4.24.0-2
- unstable 1:4.24.0-2
qsort(3) | Library Functions Manual | qsort(3) |
NAZWA¶
qsort, qsort_r - sortuje tablicę
BIBLIOTEKA¶
Standardowa biblioteka C (libc, -lc)
SKŁADNIA¶
#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);
qsort_r():
_GNU_SOURCE
OPIS¶
Funkcja qsort() sortuje tablicę nmemb elementów o rozmiarze size. Argument base wskazuje na początek tablicy.
Zawartość tablicy jest sortowana w porządku rosnącym, zgodnie z funkcją porównawczą, określoną przez wskaźnik compar. Funkcja ta jest wołana z dwoma argumentami, które wskazują na porównywane obiekty.
Funkcja porównująca musi zwracać liczbę całkowitą, która jest mniejsza, równa, lub większa od zera. Oznacza to wtedy, odpowiednio, że pierwszy argument jest mniejszy, równy, lub większy od drugiego. Jeśli oba porównywane elementy są jednakowe, to ich kolejność w posortowanej tablicy jest nieokreślona.
Funkcja qsort_r() jest taka sama jak qsort(), z wyjątkiem tego, że funkcja porównująca compar przyjmuje trzeci argument. Wskaźnik podany w argumencie arg jest przekazywany do funkcji porównującej. W ten sposób funkcja porównująca nie potrzebuje zmiennych globalnych, by przekazywać sobie dowolne argumenty i dlatego jest bezpieczna do używana w aplikacji wielowątkowej.
WARTOŚĆ ZWRACANA¶
Funkcje qsort() i qsort_r() nic nie zwracają.
WERSJE¶
qsort_r() dodano w glibc 2.8.
ATRYBUTY¶
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
Interfejs | Atrybut | Wartość |
qsort(), qsort_r() | Bezpieczeństwo wątkowe | MT-bezpieczne |
STANDARDY¶
qsort(): POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.
UWAGI¶
Aby porównać łańcuch znaków w stylu C, funkcja porównująca może wywołać strcmp(3), tak jak to pokazano w przykładzie poniżej.
PRZYKŁADY¶
Jeden przykład użycia można znaleźć w podręczniku bsearch(3).
Kolejnym przykładem jest następujący program, sortujący łańcuchy znaków podane w argumentach linii poleceń:
#include <stdio.h> #include <stdlib.h> #include <string.h> static int cmpstringp(const void *p1, const void *p2) {
/* Argumentami tej funkcji są "wskaźniki do wskaźników
na znak", ale argumentami strcmp(3) są "wskaźniki na
znak", dlatego potrzebne jest rzutowanie i dereferencja. */
return strcmp(*(const char **) p1, *(const char **) p2); } int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "Użycie: %s <łańcuch>...\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); }
ZOBACZ TAKŻE¶
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.
7 stycznia 2023 r. | Linux man-pages 6.03 |