Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

qsort - Datenfeld sortieren (Quicksort)

&pagelevel(4)&pagelevel

Definition

#include <stdlib.h>

void qsort(void *feld, size_t anz, size_t elgroesse, int (*vergl)(const void *, const void *);

qsort sortiert anz Elemente eines Vektors feld nach dem Quicksort-Algorithmus. Jedes Vektorelement ist elgroesse Bytes lang.
Um das Feld sortieren zu können, benötigt qsort eine vom Benutzer bereitzustellende Funktion vergl, die zwei Elemente miteinander vergleicht.

Parameter

void *feld

Zeiger auf das erste Element des zu sortierenden Vektors.

size_t anz

Anzahl der zu sortierenden Elemente.

size_t elgroesse

Größe eines Elementes in Bytes.

int (*vergl)(const void *, const void *)

Zeiger auf eine Funktion, die zwei Elemente vergleicht und eine ganze Zahl als Ergebnis liefert. Das Ergebnis wird wie folgt gedeutet:

< 0

Argument1 ist kleiner als Argument2

= 0

Argument1 und Argument2 sind gleich

> 0

Argument1 ist größer als Argument2

Die Funktion hat zwei Parameter, und zwar zwei Zeiger auf den Typ der Vektorelemente.

Die Funktion kann etwa wie folgt definiert sein:

Beispiel 1

/*Vergleicht zwei char-Werte*/ 
int comp(const void *a, const void *b)
   {
     if(*((const char *)a) < *((const char *) b) )
       return(-1);
     else if(*((const char *)a) > *((const char *) b ) )
            return(1);
     return(0);
   }

Beispiel 2

/*Vergleicht zwei integer-Werte*/
int compare(const void *a, const void *b)
   {
     return  ( *((const int *) a) - *((const int *) b) );
   }

Hinweise

Die Reihenfolge von Vektorelementen, für die die Vergleichsfunktion Gleichheit feststellt, wird nicht verändert.

Beispiel

Folgendes Programm sortiert eine Zahlenfeld und gibt es auf Standardausgabe aus.

#include <stdio.h>
#include <stdlib.h>
int comp   (const void *s, const void *t) 
{
    return  ( *((const int *) s) - *((const int *) t) );
}
int main(void)
{
  int j;
  static int array[] = {4,7,2,1,54,9,2,3,1,23};
  qsort (array, 10, sizeof(int), comp);
  for (j=0; j<10; j++)
     printf("%d\n", array[j]);
  return 0;
}

Siehe auch

bsearch