quicksort
Wykonuje szybkie sortowanie.Bardziej bezpieczna wersja ta funkcja jest dostępna; see qsort_s.
void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
Parametry
base
Początek tablicy docelowej.num
Rozmiar tablicy elementów.width
Element rozmiar w bajtach.compare
Wskaźnik do rutynowych dostarczone przez użytkownika, który porównuje dwa elementy tablicy i zwraca wartość, która określa ich relacji.
Uwagi
qsort Funkcji implementuje algorytm szybkiego sortowania, aby posortować obiekt array z num elementów, każdy z width bajtów.Argument base jest wskaźnik do podstawy tablicy, które mają być sortowane.qsortpowoduje zastąpienie tej tablicy przy użyciu sortowane elementy.
qsortwywołania compare rutynowych jednej lub więcej razy podczas sortowania i przekazuje wskaźniki do dwóch elementów tablicy na każde wywołanie.
compare( (void *) & elem1, (void *) & elem2 );
Rutynowe porównuje elementy i zwraca jedną z następujących wartości.
Porównać wartość zwracana funkcji |
Opis |
---|---|
< 0 |
elem1mniej niżelem2 |
0 |
elem1odpowiednikelem2 |
> 0 |
elem1większe niżelem2 |
Tablicy jest sortowany rosnąco, zgodnie z definicją funkcji porównania.Aby posortować obiekt array, w kolejności malejącej, należy odwrócić poczucie "większy niż" i "mniejszy niż" w funkcji porównania.
Funkcja ta sprawdza poprawność jego parametry.Jeśli compare lub num jest NULL, lub jeśli base jest NULL i *num jest różna od zera, lub jeśli width jest mniejsza niż zero, nieprawidłowy parametr wywoływana jest funkcja obsługi, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie mogą w dalszym ciągu, funkcja zwraca i errno jest ustawiona na EINVAL.
Wymagania
Rozpoczęto wykonywanie procedury |
Wymaganego nagłówka |
---|---|
qsort |
<stdlib.h> i <search.h> |
Aby uzyskać dodatkowe informacje 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 );
}
Odpowiednik w programie .NET Framework
System::Collections::ArrayList::sort