qsort, qsort_r - ordena un vector
Biblioteca Estándar C (
libc,
-lc)
#include <stdlib.h>
void qsort(void base[.size * .nmemb], size_t nmemb, size_t size,
int (*compar)(const void [.size], const void [.size]));
void qsort_r(void base[.size * .nmemb], size_t nmemb, size_t size,
int (*compar)(const void [.size], const void [.size], void *),
void *arg);
qsort_r():
_GNU_SOURCE
La función
qsort() ordena un vector de
nmiemb elementos de
tamaño
tam. El argumento
base apunta al comienzo del
vector.
Los contenidos del vector se clasifican en orden ascendente de acuerdo a una
función de comparación a la que apunta
compar, que se
llama con dos argumentos que apuntan a los objetos a comparar.
La función de comparación debe devolver un entero menor que, igual
a, o mayor que cero si el primer argumento se considera respectivamente menor,
igual o mayor que el segundo. Si dos miembros se comparan como iguales, su
orden en el vector clasificado queda indefinido.
The
qsort_r() function is identical to
qsort() except that the
comparison function
compar takes a third argument. A pointer is passed
to the comparison function via
arg. In this way, the comparison
function does not need to use global variables to pass through arbitrary
arguments, and is therefore reentrant and safe to use in threads.
La función
qsort() y
qsort_r() no devuelven nada.
qsort_r() ha sido añadida en la versión 2.8 de glibc.
Para obtener una explicación de los términos usados en esta
sección, véase
attributes(7).
Interfaz |
Atributo |
Valor |
qsort(), qsort_r() |
Seguridad del hilo |
Multi-hilo seguro |
qsort(): POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.
Para comparar cadenas de C, la función que la realiza puede invocar la
llamada
strcmp(3) tal como se muestra en el siguiente ejemplo.
Un buen ejemplo sería el que ilustra
search(3).
Another example is the following program, which sorts the strings given in its
command-line arguments:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int
cmpstringp(const void *p1, const void *p2)
{
/* The actual arguments to this function are "pointers to
pointers to char", but strcmp(3) arguments are "pointers
to char", hence the following cast plus dereference. */
return strcmp(*(const char **) p1, *(const char **) p2);
}
int
main(int argc, char *argv[])
{
if (argc < 2) {
fprintf(stderr, "Usage: %s <string>...\n", argv[0]);
exit(EXIT_FAILURE);
}
qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp);
for (size_t j = 1; j < argc; j++)
puts(argv[j]);
exit(EXIT_SUCCESS);
}
sort(1),
alphasort(3),
strcmp(3),
versionsort(3)
La traducción al español de esta página del manual fue
creada por Gerardo Aburruzaga García <
[email protected]>
y Marcos Fouces <
[email protected]>
Esta traducción es documentación libre; lea la
GNU
General Public License Version 3 o posterior con respecto a las
condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.
Si encuentra algún error en la traducción de esta página
del manual, envíe un correo electrónico a
[email protected]