2011-05-11 13 views
7

¿Podría alguien aconsejarle al implementar algo como IComparable en .NET qué algoritmo de ordenación usa .NET para ordenar realmente los datos subyacentes? También es el algoritmo utilizado personalizable o seleccionable?¿Qué algoritmo de clasificación implementa .NET Framework?

+0

http://stackoverflow.com/questions/204805/which-sorting-algorithm-is-used-by-net-in-icomparer o http://stackoverflow.com/questions/1854604/which-sorting-algorithm -used-in-net-arrays-sort-method-array-sort Me sorprende que el cuadro de diálogo de la "nueva pregunta" no le mostrara preguntas similares cuando ingresó este. No me sorprende que alguien no haya buscado antes de preguntar. –

+0

[Esto ha cambiado] (https://msdn.microsoft.com/en-us/library/6tf1f0bc ​​(v = vs.100) .aspx) desde .NET 4.5: ahora ordenación de inserción para n <16; de lo contrario, comienza con Quicksort y cambia a Heapsort cuando el número de particiones (¿profundidad de recursión?) Excede 2 * Log^N. Llamado: [Introsort] (https://en.wikipedia.org/wiki/Introsort) – Laoujin

Respuesta

14

Hay dos biggies.

Array.Sort (que ordena una matriz en el lugar) utiliza un unstableQuicksort.

Esta es la misma aplicación utilizado internamente por List<T>.Sort, de acuerdo con la documentación de MSDN:

Este método utiliza Array.Sort, que utiliza el algoritmo QuickSort.

El Enumerable.OrderBy<TSource, TKey> método (que ordena una copia de una secuencia de entrada) utiliza un estable Quicksort.

Hasta donde yo sé, estas son las dos únicas implementaciones de clasificación en .NET BCL.

4

El MSDN Documentation indica que el algoritmo de clasificación utilizado es Quicksort (al menos para matrices): no se puede seleccionar ni personalizar.

Tenga en cuenta que no es la interfaz IComparable que especifica qué método de clasificación usar, se reduce al método o clase que está haciendo la clasificación (normalmente una matriz o lista, pero podría ser cualquier método), por ejemplo, es completamente posible para arrays y Lists para ordenar utilizando algoritmos completamente diferentes (aunque en realidad ambos usan Quicksort)

Esto significa que si realmente lo desea, puede implementar su propio método de clasificación utilizando un algoritmo alternativo.

Cuestiones relacionadas