C/qsort

Z Wikibooks, biblioteki wolnych podręczników.
< C
Przejdź do nawigacji Przejdź do wyszukiwania

C/qsort[edytuj]

deklaracja[edytuj]

void qsort ( void * tab, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );

Plik nagłowkowy[edytuj]

stdlib.h

Opis działania[edytuj]

Sortowanie elementów w tablicy.

Sortuje num elementów, o rozmiarze równym size bajtów każdy, tablicy tab za pomocą funkcji porównującej comparator. Funkcja ta powinna działać w następujący sposób: jeśli wartość pierwszego parametru jest mniejsza od wartości drugiego, zwracana wartość powinna być ujemna. Jeżeli pierwszy argument jest większy od drugiego, funkcja powinna zwrócić wartość dodatnią. W przypadku kiedy obie przekazane wartości są równe funkcja powinna zwrócić wartość zerową. Najczęściej jako zwracane wartości niezerowe stosuje się liczby -1 i 1.

Przykład[edytuj]

Program pobierający od użytkownika określoną ilość liczb, następnie sortuje je i wyświetla

#include <stdio.h>
#include <stdlib.h>

// Porównywacz
int my_compare (const void * a, const void * b)
{
    int _a = *(int*)a;
    int _b = *(int*)b;
    if(_a < _b) return -1;
    else if(_a == _b) return 0;
    else return 1;
}

int main ()
{
    int i;
    int ile;
    int *tablica;

    puts("Podaj ile bedziesz wprowadzal wartosci: ");
    scanf("%d", &ile);

    tablica= malloc(ile * sizeof(int) );

    for (i=0; i<ile; ++i)
    {
        printf("Podaj %d liczbe: ", i+1);
        scanf("%d", &tablica[i]);
    }

    puts("\n\n");   //przerwa miedzy liczbamy podanymi a liczbami wyswietlonymi

    qsort(tablica, ile, sizeof(int), my_compare);

    for(i=0; i<ile; ++i)
        printf("%d\n", tablica[i]);

    free(tablica);

    return 0;
}