#include #include /* Funkcija qsort, silazno sortiranje polja intova. Pazi na tipove kod poziva qsort (kao u primjeru 2c). - Funkcija za usporedbu prima pokazivace korektnog tipa, a cast funkcije je samo u pozivu qsort. Koristi ime tipa za cast. */ /* Elegantnije rjesenje za pozive qsort, bsearch (v. KR2, str. 119--121): Funkcije za usporedbu su napisane u "pravim" tipovima, a propisni cast ide izravno u pozivu qsort, bsearch. */ /* Ovdje uvodimo i pripadni tip - za citljiviji cast. */ typedef int (*Comp_fun) (const void*, const void*); /* Funkcija usporedi ima prave tipove argumenata. */ /* Za silazno sortiranje treba okrenuti predznak rezultata! */ int usporedi(const int *p_a, const int *p_b) { /* Nije dobro: return *p_b - *p_a; jer rezultat ne mora biti korektno prikaziv! */ if (*p_a < *p_b) return 1; else if (*p_a > *p_b) return -1; else return 0; } int main(void) { int i, polje[4] = {1, 3, -4, 2}; /* Cast na funkciju usporedi kod poziva. */ qsort(polje, 4, sizeof(int), (Comp_fun) usporedi); for (i = 0; i < 4; ++i) printf("%d\n", polje[i]); return 0; }