/********************************************************/
/* soubor fn_qsrt.c */
/* ukazuje pouziti qsort() a definici a pretypovani */
/* uzivatelske srovnavaci funkce */
/********************************************************/
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define POCET 1000
#define RND_START 1234
int float_sort (const float *a, const float *b)
{
return (*a - *b); /* <0, ==0, >0 */
} /* int float_sort (const float *a, const float *b) */
void test (float *p, unsigned int pocet)
/* otestuje zda dane pole je setrideno vzestupne */
{
int chyba = 0;
for (; !chyba && --pocet > 0; p++)
if (*p > *(p+1))
chyba=1;
puts ((chyba) ? "\npole neni setrideno\n"
: "\npole je setrideno\n");
} /* void test (float *p,unsigned int pocet) */
void vypln(float *p, int pocet)
/* vypni pole dane adresou a pocte prvku, nahodnymi */
/* cisly pomoci generatoru nahodnych cisel */
{
srand(RND_START);
while (pocet-- > 0)
*p++ = (float) rand();
} /* void vypln(float *p, int pocet) */
int main (void)
{
static float pole [POCET];
clock_t start, end;
vypln (pole, POCET);
start = clock();
qsort(pole, POCET, sizeof(*pole),
(int (*) (const void *, const void *)) float_sort);
end = clock ();
printf ("Trideni qsort trvalo %fs", (end - start) / CLK_TCK);
test (pole, POCET);
getc (stdin);
return 0;
} /* int main (void) */