usuarios universitario universitaria una trabajan tipos servicios que personas organiza libros funciones como clasificacion catalogar bibliotecas bibliotecario biblioteca auxiliar c sorting

universitario - personas que trabajan en una biblioteca



Función de la biblioteca C para hacer la clasificación (7)

¿Hay alguna función de biblioteca disponible en la biblioteca estándar de C para ordenar?


Aunque no está exactamente en la biblioteca estándar, https://github.com/swenson/sort tiene solo dos archivos de encabezado que puede incluir para obtener acceso a una amplia gama de rutas de clasificación increíblemente rápidas, como las siguientes:

#define SORT_NAME int64 #define SORT_TYPE int64_t #define SORT_CMP(x, y) ((x) - (y)) #include "sort.h" /* You now have access to int64_quick_sort, int64_tim_sort, etc., e.g., */ int64_quick_sort(arr, 128); /* Assumes you have some int *arr or int arr[128]; */

Esto debería ser al menos dos veces más rápido que el qsort biblioteca estándar, ya que no usa punteros de función, y tiene muchas otras opciones de algoritmo de clasificación para elegir.

Está en C89, por lo que debería funcionar básicamente en cada compilador de C.


De seguro: qsort() es una implementación de un tipo (no necesariamente quicksort como su nombre podría sugerir).

Pruebe man qsort o lea en http://linux.die.net/man/3/qsort


Hay varias funciones de clasificación C disponibles en stdlib.h . Puede hacer man 3 qsort en una máquina Unix para obtener una lista de ellos, pero incluyen:

  • heapsort
  • ordenación rápida
  • mergesort

La biblioteca estándar C / C ++ <stdlib.h> contiene la función qsort .

Esta no es la mejor implementación de ordenamiento rápido del mundo, pero es lo suficientemente rápida y MUY FÁCIL de usar ... la sintaxis formal de qsort es:

qsort(<arrayname>,<size>,sizeof(<elementsize>),compare_function);

Lo único que necesita implementar es la función compare_, que toma dos argumentos de tipo "const void", que se pueden convertir a la estructura de datos apropiada, y luego devuelve uno de estos tres valores:

  • negativo, si a debe estar antes b
  • 0, si a es igual a b
  • positivo, si a debe ser después de b

1. Comparando una lista de enteros :

simplemente arroja a y b a enteros si x < y , xy es negativo, x == y , xy = 0 , x > y , xy es positivo xy es una forma de acceso directo para hacerlo :) reverse *x - *y to *y - *x para clasificar en orden decreciente / inverso

int compare_function(const void *a,const void *b) { int *x = (int *) a; int *y = (int *) b; return *x - *y; }

2. Comparando una lista de cadenas :

Para comparar cadenas, necesitas la función strcmp dentro de <string.h> lib. strcmp regresará por defecto -ve, 0, ve apropiadamente ... para ordenar en orden inverso, simplemente invierta el signo devuelto por strcmp

#include <string.h> int compare_function(const void *a,const void *b) { return (strcmp((char *)a,(char *)b)); }

3. Comparando números de coma flotante :

int compare_function(const void *a,const void *b) { double *x = (double *) a; double *y = (double *) b; // return *x - *y; // this is WRONG... if (*x < *y) return -1; else if (*x > *y) return 1; return 0; }

4. Comparar registros basados ​​en una clave :

A veces necesita ordenar un material más complejo, como grabar. Esta es la forma más sencilla de hacerlo usando la biblioteca qsort .

typedef struct { int key; double value; } the_record; int compare_function(const void *a,const void *b) { the_record *x = (the_record *) a; the_record *y = (the_record *) b; return x->key - y->key; }


Use qsort () en stdlib.

@paxdiablo La función qsort () cumple con ISO / IEC 9899: 1990 (`` ISO C90 '''').


intente qsort en stdlib.h.


qsort() es la función que estás buscando. Usted lo llama con un puntero a su matriz de datos, la cantidad de elementos en esa matriz, el tamaño de cada elemento y una función de comparación.

Hace su magia y su matriz se ordena en el lugar. Un ejemplo a continuación:

#include <stdio.h> #include <stdlib.h> int comp (const void * elem1, const void * elem2) { int f = *((int*)elem1); int s = *((int*)elem2); if (f > s) return 1; if (f < s) return -1; return 0; } int main(int argc, char* argv[]) { int x[] = {4,5,2,3,1,0,9,8,6,7}; qsort (x, sizeof(x)/sizeof(*x), sizeof(*x), comp); for (int i = 0 ; i < 10 ; i++) printf ("%d ", x[i]); return 0; }