2012-07-17 18 views

Respuesta

9

Salida qsort

Sintaxis:

#include <stdlib.h>
void qsort(void *buf, size_t num, size_t size, int (*compare)(const void *, const void *));

Descripción:

Los qsort() tipo de función buf (que contiene elementos num, cada uno del tamaño de tamaño) utilizando ordenación rápida. La función de comparación se usa para comparar los artículos en buf. compare debería ser negativo si el primer argumento es menor que el segundo, cero si son iguales y positivo si el primer argumento es mayor que el segundo. qsort() ordena buf en orden ascendente.

+0

Muchas gracias: D También gracias a los demás que respondieron: D – CluelessNoob

+2

NOTA: qsort() no es necesariamente quicksort. (a menudo lo es, sin embargo) – wildplasser

7

Puede usar qsort en stdlib.h. Es un algoritmo de ordenación rápida, que tiene una complejidad de tiempo promedio de O (nlogn) y la complejidad del caso más desfavorable de O (n). El C99 standard e incluso el más reciente C11 Standard no exige la implementación o la complejidad de tiempo de la función. Sin embargo, es muy probable que la implementación común utilice algoritmos que proporcionen una complejidad de tiempo promedio de caso O (nlogn) (que es óptima para la clasificación por comparación).

Puede usar esto para ordenar cualquier tipo de matriz (incluso struct), pero debe proporcionar una función de comparación para comparar los 2 elementos de la matriz.

+2

NOTA: qsort() no es necesariamente quicksort. (a menudo lo es, sin embargo) – wildplasser

+0

@wildplasser: Editado. – nhahtdh

+0

Puede vincular al [Estándar C11] (http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf) hoy en día :) – pmg

6

qsort es bien conocida. También hay otros como heapsort, mergesort, etc. Consulte el enlace para obtener más detalles.

Tenga en cuenta que todas ellas toman como funciones de comparación las funciones de comparación, lo que las hace fácilmente utilizables con tipos de datos nativos y creados por el usuario.

+1

Tenía curiosidad en qué biblioteca estándar existe ' mergesort' y 'heapsort' ... resulta que están en la libc de FreeBSD. Guay. +1 (Nota: no parecen existir en glibc.) –

+0

Son funciones C no estándar. – nhahtdh

0

sintaxis simple:

int function (const void * a, const void * b) {return (*(int*)a-(int*)b);} 
`qsort(arr_name , sizeofarray , sizeof(int), function); 
Cuestiones relacionadas