/********************************************************/
/* 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)  */