Provided by: manpages-pl-dev_4.18.1-1_all bug

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);

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       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()  was added in glibc 2.8.

ATRYBUTY

       Informacje   o   pojęciach   używanych   w  tym  rozdziale  można  znaleźć  w  podręczniku
       attributes(7).

       ┌──────────────────────────────────────────────────────┬────────────────────────┬─────────┐
       │InterfejsAtrybutWartość │
       ├──────────────────────────────────────────────────────┼────────────────────────┼─────────┤
       │qsort(), qsort_r()                                    │ Bezpieczeństwo wątkowe │ MT-Safe │
       └──────────────────────────────────────────────────────┴────────────────────────┴─────────┘

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 <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);
       }

ZOBACZ TAKŻE

       sort(1), alphasort(3), strcmp(3), versionsort(3)

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.