Freigeben über


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

Siehe auch

Suchen und Sortieren
bsearch
_lsearch