Freigeben über


qsort

Führt eine schnelle Sortierung aus. Eine sicherere Version dieser Funktion ist verfügbar; finden Sie unter qsort_s.

void qsort(
   void *base,
   size_t num,
   size_t width,
   int (__cdecl *compare )(const void *, const void *) 
);

Parameter

  • base
    Anfang des Zielarrays.

  • num
    Arraygröße in Elementen.

  • width
    Elementgröße in Bytes.

  • compare
    Zeiger zu einer vom Benutzer bereitgestellten Routine, die zwei Arrayelemente verglichen und einen Wert zurückgibt, der die Beziehung angibt.

Hinweise

Die qsort-Funktion implementiert einen QuickSortierungsalgorithmus, um ein Array, num-Elemente jedes von width Bytes zu sortieren. Das Argument base ist ein Zeiger zur Basis des zu sortierende Arrays. qsort überschreibt dieses Array, indem die sortierten Elemente verwendet.

qsort ruft die Routine compare mindestens einmal bei der Sortierung auf und übergibt Zeiger zu zwei Arrayelementen auf jedem Aufruf.

compare( (void *) & elem1, (void *) & elem2 );

Die Routine vergleicht die Elemente und gibt einen der folgenden Werte zurück.

Compare-Funktions-Rückgabewert

Beschreibung

< 0

elem1 kleiner als elem2

0

elem1 entspricht elem2

> 0

elem1 größer als elem2

Das Array ist in aufsteigender Reihenfolge sortiert, wie von der Vergleichsfunktion definiert. Um ein Array in absteigender Reihenfolge zu sortieren, kehren Sie dem Sinne "in größerem als" und "kleiner als" in der Vergleichsfunktion um.

Diese Funktion überprüft ihre Parameter. Wenn compare oder num ist NULL oder base und NULL ist *num ist ungleich 0 (null), oder, wenn width kleiner als null ist, wird der ungültige Parameterhandler aufgerufen, wie in Parametervalidierung beschrieben. Wenn die Ausführung zulässig ist, um fortzufahren, kehrt die Funktion zurück und errno ist auf EINVAL festgelegt.

Anforderungen

Routine

Erforderlicher Header

qsort

<stdlib.h und> search.h <>

Zusätzliche 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 );
}
  

.NET Framework-Entsprechung

System::Collections::ArrayList::Sort

Siehe auch

Referenz

Suchen und Sortieren

bsearch

_lsearch