¿Qué algoritmo de clasificación utiliza el método Array.Sort()
de .NET?¿Qué algoritmo de clasificación utiliza el método Array.Sort() de .NET?
Respuesta
Pregunta: a menos que el OP haya preguntado específicamente sobre .NET 1.1, ¿por qué darle un enlace a la documentación de .NET 1.1? –
@John: Gracias, no lo noté, enlace fijo ... – CMS
.Net framework usa Introsort en lugar de simple ordenación rápida desde la versión 4.5. http://en.wikipedia.org/wiki/Introsort – gordanvij
Utiliza quick sort for sorting purpose
ordenamiento rápido como se ha mencionado. ¡Pero no sirve para todos los datos!
Al usar reflector: ordena en un dll nativo -> para el caso más común de matrices 1D, en orden ascendente. Sin embargo, otros casos se clasifican en código administrado, con muy pocas optimizaciones aplicadas. Por lo tanto, su velocidad suele ser mucho más lenta.
En realidad, no es tan fácil como parece. Parece que .NET está implementando un conjunto de algoritmos de clasificación diferentes según la entrada y su tamaño. Solía descompilar Array.Sort()
de CLR y parece que están usando Heap, Insertion y Quicksort.
... ya que está claramente documentada aquí https://msdn.microsoft.com/en-us/library /6tf1f0bc.aspx –
Array.Sort()
elige uno de los tres algoritmo de clasificación, en función del tamaño de la entrada:
- Si el tamaño es menos de 16 elementos, se utiliza un algoritmo de ordenación por inserción.
- Si el tamaño excede
2 * log^N
, dondeN
es el rango de la matriz de entrada, utiliza un algoritmo de ordenación de pila. - De lo contrario, se utiliza un algoritmo de ordenación rápida
Fuente: Array.Sort(Array) Method on MSDN.
Debe volver a leer ese tema. En particular, su artículo n. ° 2 es incorrecto. No basa esa decisión en el tamaño de la entrada, sino más bien en el * número de particiones. * 'Array.Sort' implementa Introsort, que está diseñado para usar Quicksort en la mayoría de los casos (con la optimización añadida de usar el tipo de inserción) para particiones pequeñas), pero si detecta que el orden del artículo resulta en un caso patológico para Quicksort, cambia a Heapsort. –
- 1. ¿El algoritmo de clasificación utilizado por el método `Array.Sort()` de .NET es un algoritmo estable?
- 2. ¿Qué algoritmo de clasificación utiliza LINQ "OrderBy"?
- 3. ¿Qué algoritmo (s) de clasificación utiliza MySQL?
- 4. ¿Qué algoritmo de clasificación implementa .NET Framework?
- 5. ¿Qué algoritmo usa el método de clasificación de Ruby?
- 6. Array.sort Clasificación de la estabilidad en diferentes navegadores
- 7. ¿Implementación de Javascript Array.sort?
- 8. ¿Qué algoritmo de clasificación usa PHP?
- 9. ¿Por qué el método Arrays.sort de Java utiliza dos algoritmos de clasificación diferentes para diferentes tipos?
- 10. Un algoritmo de clasificación
- 11. ¿Qué algoritmo hash utiliza el mapeo del diccionario de Python?
- 12. ¿Qué está pasando en el método de clasificación de ruby?
- 13. Algoritmo Problema Clasificación
- 14. ¿Qué algoritmo de clasificación de múltiples criterios usar?
- 15. ¿Qué algoritmo de clasificación está detrás de un NSSortDescriptor?
- 16. Array.sort y Node.js
- 17. ¿Cómo es Array.Sort en C# tan súper rápido?
- 18. Algoritmo eficiente de clasificación de cadenas
- 19. Algoritmo de clasificación basado en comparación
- 20. Elija el algoritmo de clasificación correcto. Lineal o no lineal?
- 21. C# - Clasificación utilizando el Método de extensión
- 22. ¿Cuándo se usa cada algoritmo de clasificación?
- 23. Medición del rendimiento del algoritmo de clasificación
- 24. ¿Qué método de cifrado usa el método .NET FormsAuthentication.Encrypt()?
- 25. Ruby: ¿Por qué Array.sort es lento para objetos grandes?
- 26. ¿Existe un algoritmo de "clasificación binaria"?
- 27. ¿Cuál es el mejor algoritmo de clasificación de asientos reservados?
- 28. ¿Qué algoritmo de criptografía .NET incorporado es el más seguro?
- 29. ¿Cuáles son los criterios para elegir un algoritmo de clasificación?
- 30. ¿Qué algoritmo utiliza .Net para buscar un patrón en una cadena?
Related [thread] (https://stackoverflow.com/q/148074/465053) relacionado con la estabilidad del algoritmo utilizado por el método de ordenación. – RBT
Related [thread] (https://stackoverflow.com/q/2792074/465053): cuando utiliza la ordenación basada en LINQ en su lugar. – RBT