qsort_s

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu stdlib.h - Index


Header-Datei

stdlib.h

Kategorie

Suchen und Sortieren

Prototyp

errno_t qsort_s(void * __base, rsize_t __nelem, rsize_t __width, int (_USERENTRY *__fcmp)(const void *k, const void *y, void *__context), void *__context);

Beschreibung

Ersetzt qsort und fügt Sicherheitserweiterungen hinzu.

qsort_s ist eine Implementierung der "Mittelwert von drei"-Variante des Quicksort-Algorithmus. qsort_s sortiert die Einträge einer Tabelle und ruft dabei wiederholt die benutzerdefinierte Vergleichsfunktion auf, auf die __fcmp zeigt.

  • __base zeigt auf die Basis (das Element 0) der zu sortierenden Tabelle.
  • Der Parameter __nelem gibt die Anzahl der Einträge in der Tabelle an.
  • __width gibt die Größe jedes Eintrags in der Tabelle in Byte an.

Die Vergleichsfunktion __fcmp muss mit der Aufrufkonvention _USERENTRY verwendet werden.

  • __fcmp akzeptiert zwei Argumente, k und y; beide sind Zeiger auf einen Eintrag in der Tabelle. __context wird direkt an die Funktion __fcmp übergeben, um eine generischere Benutzerimplementierung zu gewährleisten. Die Vergleichsfunktion vergleicht die beiden Einträge, auf die *k und *y zeigen, und gibt einen vom Ergebnis dieses Vergleichs abhängigen Integerwert zurück.

__fcmp gibt einen Integerwert gemäß den folgenden Regeln zurück:

  • < 0 wenn *k < *y
  • == 0 wenn *k == *y
  • > 0 wenn *k > *y


Rückgabewert

qsort_s gibt bei Erfolg Null zurück, ansonsten einen Nicht-Nullwert.

Beispiel

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
int sort_function( const void *a, const void *b, void* context); 
char list[5][4] = { "cat", "car", "cab", "cap", "can" }; 
int main(void) 
{ 
   int  x; 
   qsort_s((void *)list, 5, sizeof(list[0]), sort_function, NULL); 
   for (x = 0; x < 5; x++) 
      printf("%s\n", list[x]); 
   return 0; 
} 
int sort_function( const void *a, const void *b, void* context) 
{ 
   return( strcmp((char *)a,(char *)b) );
}

Portabilität

POSIX Win32 ANSI C ANSI C++

+

+

+

+

Siehe auch