Sdílet prostřednictvím


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 menší 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 NULLNULL 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

Viz také

Vyhledávání a řazení
bsearch
_lsearch