Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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