Udostępnij za pośrednictwem


qsort

Wykonuje szybkie sortowanie. Dostępna jest bezpieczniejsza wersja tej funkcji; zobacz qsort_s.

Składnia

void qsort(
   void *base,
   size_t number,
   size_t width,
   int (__cdecl *compare )(const void *, const void *)
);

Parametry

base
Początek tablicy docelowej.

number
Rozmiar tablicy w elementach.

width
Rozmiar elementu w bajtach.

compare
Wskaźnik do procedury dostarczonej przez użytkownika, która porównuje dwa elementy tablicy i zwraca wartość określającą ich relację.

Uwagi

Funkcja qsort implementuje algorytm szybkiego sortowania w celu sortowania tablicy number elementów, każdy z bajtów width . Argument base jest wskaźnikiem do podstawy tablicy do sortowania. qsort zastępuje tę tablicę przy użyciu posortowanych elementów.

qsort wywołuje procedurę compare co najmniej raz w trakcie sortowania i przekazuje wskaźniki do dwóch elementów tablicy w każdym wywołaniu. Jeśli compare wskazuje, że dwa elementy są takie same, ich kolejność w wynikowej posortowanej tablicy jest nieokreślona.

compare(const void *elem1, const void *elem2);

Ta rutyna porównuje elementy i zwraca jedną z następujących wartości.

Porównanie wartości zwracanej funkcji opis
< 0 elem1 mniejsze niż elem2
0 elem1 równoważne elem2
> 0 elem1 większe niż elem2

Tablica jest sortowana w kolejności rosnącej zgodnie z definicją funkcji porównania. Aby posortować tablicę w kolejności malejącej, odwrócić poczucie wartości "większe niż" i "mniejsze niż" w funkcji porównania.

Ta funkcja weryfikuje jego parametry. Jeśli compare wartość lub number ma numberNULLNULLwartość , lub base jest niezerowa lub width jest mniejsza niż zero, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Walidacja parametru. Jeśli wykonywanie jest dozwolone do kontynuowania, funkcja zwraca wartość i errno jest ustawiona na EINVALwartość .

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek
qsort <stdlib.h> i <search.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

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

Zobacz też

Wyszukiwanie i sortowanie
bsearch
_lsearch