qsort
Führt eine schnelle Sortierung aus. Eine sicherere Version dieser Funktion ist verfügbar; siehe qsort_s
.
Syntax
void qsort(
void *base,
size_t number,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
Parameter
base
Start des Zielarrays.
number
Arraygröße in Elementen.
width
Elementgröße in Bytes.
compare
Zeiger auf eine benutzerdefinierte Routine, die zwei Elemente des Arrays vergleicht und einen Wert zurückgibt, der ihre Beziehung angibt.
Hinweise
Die qsort
-Funktion implementiert einen Schnellsortierungsalgorithmus, um ein Array von number
-Elementen zu sortieren, die jeweils aus width
-Bytes bestehen. Das base
-Argument ist ein Zeiger auf die Basis des Arrays, das sortiert werden soll. qsort
überschreibt dieses Array mit den sortierten Elementen.
qsort
ruft die compare
-Routine einmal oder mehrere Male während der Sortierung auf, wodurch bei jedem Aufruf Zeiger auf zwei Arrayelemente übergeben werden. Wenn compare
angegeben ist, dass zwei Elemente identisch sind, ist ihre Reihenfolge im resultierenden sortierten Array nicht angegeben.
compare(const void *elem1, const void *elem2);
Die Routine vergleicht die Elemente und gibt einen der folgenden Werte zurück.
Vergleich des Rückgabewerts der Funktion | Beschreibung |
---|---|
< 0 | elem1 kleiner als elem2 |
0 | elem1 gleich elem2 |
> 0 | elem1 größer als elem2 |
Das Array wird in aufsteigender Reihenfolge sortiert, wie von der Vergleichsfunktion definiert. Kehren Sie die Richtung „größer als“ und „kleiner als“ in der Vergleichsfunktion um, um ein Array in absteigender Reihenfolge zu sortieren.
Diese Funktion überprüft ihre Parameter. Wenn compare
oder number
ist NULL
oder ist NULL
oder ist base
und ist und number
ist nicht 0, oder wenn width
kleiner als Null, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die Ausführung fortgesetzt werden darf, wird die Funktion zurückgegeben und errno
auf EINVAL
.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Routine | Erforderlicher Header |
---|---|
qsort |
<stdlib.h> und <search.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// 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