qsort(3) Library Functions Manual qsort(3) NAZWA qsort, qsort_r - sortuje tablice BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include 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 tablice nmemb elementow o rozmiarze size. Argument base wskazuje na poczatek tablicy. Zawartosc tablicy jest sortowana w porzadku rosnacym, zgodnie z funkcja porownawcza, okreslona przez wskaznik compar. Funkcja ta jest wolana z dwoma argumentami, ktore wskazuja na porownywane obiekty. Funkcja porownujaca musi zwracac liczbe calkowita, ktora jest mniejsza, rowna, lub wieksza od zera. Oznacza to wtedy, odpowiednio, ze pierwszy argument jest mniejszy, rowny, lub wiekszy od drugiego. Jesli oba porownywane elementy sa jednakowe, to ich kolejnosc w posortowanej tablicy jest nieokreslona. Funkcja qsort_r() jest taka sama jak qsort(), z wyjatkiem tego, ze funkcja porownujaca compar przyjmuje trzeci argument. Wskaznik podany w argumencie arg jest przekazywany do funkcji porownujacej. W ten sposob funkcja porownujaca nie potrzebuje zmiennych globalnych, by przekazywac sobie dowolne argumenty i dlatego jest bezpieczna do uzywana w aplikacji wielowatkowej. WARTOSC ZWRACANA Funkcje qsort() i qsort_r() nic nie zwracaja. ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +---------------------------+--------------------------+---------------+ |Interfejs | Atrybut | Wartosc | +---------------------------+--------------------------+---------------+ |qsort(), qsort_r() | Bezpieczenstwo watkowe | MT-bezpieczne | +---------------------------+--------------------------+---------------+ STANDARDY qsort() C11, POSIX.1-2008. HISTORIA qsort() POSIX.1-2001, C89, SVr4, 4.3BSD. qsort_r() glibc 2.8. UWAGI Aby porownac lancuch znakow w stylu C, funkcja porownujaca moze wywolac strcmp(3), tak jak to pokazano w przykladzie ponizej. PRZYKLADY Jeden przyklad uzycia mozna znalezc w podreczniku bsearch(3). Kolejnym przykladem jest nastepujacy program, sortujacy lancuchy znakow podane w argumentach linii polecen: #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 ...\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 TAKZE sort(1), alphasort(3), strcmp(3), versionsort(3) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Przemek Borys , Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. qsort(3)