qsort ()- Sortierarray

Format

#include <stdlib.h>
void qsort(void *base, size_t num, size_t width,
           int(*compare)(const void *key, const void *element));

Sprachniveau

ANSI

Sicher für Threads

Ja

Beschreibung

Die Funktion qsort() sortiert ein Array von num Elementen mit einer Größe von jeweils width Byte. Der Basiszeiger ist ein Zeiger auf das zu sortierende Array. Die Funktion qsort() überschreibt dieses Array mit den sortierten Elementen.

Das Argument compare ist ein Zeiger auf eine Funktion, die Sie angeben müssen, die einen Zeiger auf das Argument key und auf ein Array elementin dieser Reihenfolge verwendet. Die Funktion qsort() ruft diese Funktion während der Suche mindestens einmal auf. Die Funktion muss den Schlüssel und das -Element vergleichen und einen der folgenden Werte zurückgeben:

Tabelle 1 Rückgabewerte der Funktion qsort() compare
Wert Bedeutung
Kleiner als 0 Schlüssel kleiner als Element
0 Schlüssel gleich Element
größer als 0 key greater than Element

Die sortierten Array-Elemente werden in aufsteigender Reihenfolge gespeichert, wie durch Ihre Funktion compare definiert. Sie können in umgekehrter Reihenfolge sortieren, indem Sie den Sinn für "größer als" und "kleiner als" in vergleichenumkehren. Die Reihenfolge der Elemente ist nicht angegeben, wenn zwei Elemente gleich verglichen werden.

Rückgabewert

Es gibt keinen Rückgabewert.

Beispiel

In diesem Beispiel werden die Argumente (argv) in aufsteigender lexikalischer Folge sortiert, wobei die im Beispiel bereitgestellte Vergleichsfunktion compare() verwendet wird.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
               /* Declaration of compare() as a function */
int compare(const void *, const void *);
 
int main (int argc, char *argv[ ])
{
   int i;
   argv++;
   argc--;
   qsort((char *)argv, argc, sizeof(char *), compare);
   for (i = 0; i < argc; ++i)
      printf("%s\n", argv[i]);
   return 0;
}
 
int compare (const void *arg1, const void *arg2)
{
               /* Compare all of both strings */
   return(strcmp(*(char **)arg1, *(char **)arg2));
}
 
/***********  If the program is passed the arguments:  ************
******** 'Does' 'this' 'really' 'sort' 'the' 'arguments' 'correctly?'****
****************  then the expected output is: *******************
 
arguments
correctly?
really
sort
the
this
Does
*/

Zugehörige Informationen