Ordenación en C
qsort
Para la ordenación de un array de elementos en C se dispone de
una función estándar denominada, qsort. La interfaz de la
función es:
void
qsort(void *base, size_t nel,
size_t size,
int (*compar)(const void *, const
void *));
Esta función ordenada un array de nel elementos, donde base es un puntero al elemento
inicial. El tamaño de cada elemento, en bytes, se especifica con
el argumento size. Finalmente,
compar es un puntero a
una función que se le pasa como argumento dos punteros a
elementos a comparar, y devuelve un entero menor, igual o mayor que
cero, segun el primer elemento sea menor, igual o mayor que el segundo.
A continuación se muestra un ejemplo de empleo de qsort para ordenador un array de
enteros.
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUMBERS 10000
/* The compare argument is a pointer to the comparison function, which is called with two arguments that point
to the elements being compared. The application shall ensure that the function returns an integer less than, equal to,
or greater than 0, if the first argument is considered respectively less than, equal to, or greater than the second.
If two members compare as equal, their order in the sorted array is unspecified.*/
int compare(const void *_a, const void *_b) {
int *a, *b;
a = (int *) _a;
b = (int *) _b;
return (*a - *b);
}
int main () {
int numbers[MAX_NUMBERS];
int i, size = 0;
while( (scanf("%d",&numbers[size]) != EOF) && (size < MAX_NUMBERS) ){
size ++;
}
for (i = 0; i < size; i ++) {
printf("%d ", numbers[i]);
}
printf ("\n");
qsort(numbers, size, sizeof(int), &compare);
printf ("size:%d\n", size);
for (i = 0; i < size; i ++) {
printf("%d ", numbers[i]);
}
/* Check if numbers is actually sorted */
for (i = 0; i < size-1; i ++) {
if (numbers[i] > numbers[i+1]) {
printf("Failed !!!!!");
break;
}
}
return 0;
}
Universidad Autonoma de Madrid, 2004 - 2005