qsort
Provede rychlé řazení. K dispozici je bezpečnější verze této funkce; viz .qsort_s
Syntaxe
void qsort(
void *base,
size_t number,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
Parametry
base
Začátek cílového pole
number
Velikost pole v prvech
width
Velikost prvku v bajtech
compare
Ukazatel na rutinu zadanou uživatelem, která porovnává dva prvky pole a vrací hodnotu, která určuje jejich relaci.
Poznámky
Funkce qsort
implementuje algoritmus rychlého řazení pro řazení pole number
prvků, z nichž každý z width
bajtů. base
Argument je ukazatel na základ pole, který se má seřadit. qsort
přepíše toto pole pomocí seřazených prvků.
qsort
volá rutinu compare
jednou nebo vícekrát během řazení a předává ukazatele na dva prvky pole při každém volání. Pokud compare
jsou dva prvky stejné, jejich pořadí ve výsledné seřazené matici není zadáno.
compare(const void *elem1, const void *elem2);
Rutina porovnává prvky a vrací jednu z následujících hodnot.
Porovnání návratové hodnoty funkce | Popis |
---|---|
< 0 | elem1 méně než elem2 |
0 | elem1 ekvivalentem elem2 |
> 0 | elem1 větší než elem2 |
Pole se seřadí vzestupně, jak je definováno funkcí porovnání. Chcete-li řadit pole v sestupném pořadí, převrácení smysl "větší než" a "menší než" ve funkci porovnání.
Tato funkce ověří své parametry. Pokud compare
je nebo number
je nebo base
je NULL
NULL
nenulovánumber
, nebo je-li width
menší než nula, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, vrátí funkce a errno
je nastavena na EINVAL
.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
qsort |
<stdlib.h> a <search.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// crt_qsort.c
// arguments: every good boy deserves favor
/* This program reads the command-line
* parameters and uses qsort to sort them. It
* then displays the sorted arguments.
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int compare( const void *arg1, const void *arg2 );
int main( int argc, char **argv )
{
int i;
/* Eliminate argv[0] from sort: */
argv++;
argc--;
/* Sort remaining args using Quicksort algorithm: */
qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare );
/* Output sorted list: */
for( i = 0; i < argc; ++i )
printf( " %s", argv[i] );
printf( "\n" );
}
int compare( const void *arg1, const void *arg2 )
{
/* Compare all of both strings: */
return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
}
boy deserves every favor good