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 number
NULL
NULL
wartość , 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 EINVAL
wartość .
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