Details
sort
es una función genérica para la que se pueden escribir métodos, y sort.int
es el método interno que es compatible con S si solo se utilizan los tres primeros argumentos.
el método predeterminado sort
hace uso de order
para objetos clasificados, que a su vez hace uso de la función genérica xtfrm
(y puede ser lento a menos que un método xtfrm
se ha definido o is.numeric(x)
es true).,
Los valores complejos se ordenan primero por la parte real, luego por la parte imaginaria.
excepto para el método "radix"
, el orden de ordenación de los vectores de caracteres dependerá de la secuencia de cotejo de la configuración regional en uso: véase Comparison
. El orden de clasificación de los factores es el orden de sus niveles (que es particularmente apropiado para los factores ordenados).
Sipartial
no es NULL
, se considera que contiene índices de elementos del resultado que deben colocarse en sus posiciones correctas en la matriz ordenada por ordenación parcial., Para cada uno de los valores de resultado en una posición especificada, se garantiza que cualquier valor menor que ese tenga un índice más pequeño en la matriz ordenada y que cualquier valor mayor tenga un índice más grande en la matriz ordenada. (Esto se incluye para la eficiencia, y muchas de las opciones no están disponibles para la clasificación parcial. Solo es sustancialmente más eficiente si partial
tiene un puñado de elementos, y se realiza una ordenación completa (un Quicksort si es posible) si hay más de 10.) Los nombres se descartan para su ordenación parcial.,
Method "quick"
usa la implementación de Singleton (1969) del método Quicksort de Hoare y solo está disponible cuando x
es numérico (doble o entero) y partial
es NULL
. (Para otros tipos de x
se usa Shellsort, silenciosamente.) Normalmente es algo más rápido que Shellsort (quizás un 50% más rápido en vectores de un millón de longitud y el doble de rápido en un billón), pero tiene un rendimiento pobre en el peor de los casos., (La modificación de Peto usando un punto medio pseudo-aleatorio se usa para hacer el peor de los casos más raro.) Este no es un tipo estable, y los lazos pueden ser reordenados.
Method "radix"
se basa en el hash simple para escalar el tiempo linealmente con el tamaño de entrada, es decir, su complejidad de tiempo asintótica es O(n). La variante específica y su implementación se originaron a partir de los datos.paquete de mesa y se deben a Matt Dowle y Arun Srinivasan., Para entradas pequeñas (< 200), la implementación utiliza un tipo de inserción (o(n^2)) que funciona in situ para evitar la sobrecarga de asignación del tipo radix. Para vectores enteros de rango inferior a 100,000, cambia a una clasificación de conteo de tiempo lineal más simple y rápida. En todos los casos, el orden es estable; el orden de los lazos se conserva. Es el método predeterminado para los vectores y factores enteros.
el método "radix"
generalmente supera a los otros métodos, especialmente para vectores de caracteres y enteros pequeños., En comparación con Quick sort, es ligeramente más rápido para vectores con valores enteros o reales grandes (pero a diferencia de Quick sort, radix es estable y admite todas las opciones na.last
). La implementación es Órdenes de magnitud más rápida que shell sort para vectores de caracteres, en parte gracias al uso inteligente de la tabla interna CHARSXP
.
sin Embargo, hay algunas advertencias con el radix sort:
-
Si
x
es uncharacter
vector, todos los elementos deben compartir la misma codificación., Solo se admiten codificaciones UTF-8 (incluyendo ASCII) y Latin-1. La intercalación siempre sigue la configuración regional «C». -
Los vectores largos (con más de 2^32 elementos) y los vectores
complex
todavía no son compatibles.