2011-05-11 6 views
7

Quelqu'un pourrait-il nous conseiller lors de l'implémentation de quelque chose comme IComparable dans .NET quel algorithme de tri utilise .NET pour trier réellement les données sous-jacentes? L'algorithme utilisé est-il également personnalisable ou sélectionnable?Quel algorithme de tri est implémenté par le framework .NET

+0

http://stackoverflow.com/questions/204805/quand-sorting-algorithm-is-used-by-net-in-icomparer ou http://stackoverflow.com/questions/1854604/which-sorting-algorithm -used-in-net-arrays-tri-method-array-sort Je suis surpris que la boîte de dialogue 'nouvelle question' ne vous ait pas montré des questions similaires lorsque vous avez entré celui-ci. Je ne suis pas surpris que quelqu'un n'ait pas cherché avant de demander. –

+0

[Cela a changé] (https://msdn.microsoft.com/fr-fr/library/6tf1f0bc ​​(v = vs.100) .aspx) depuis .NET 4.5: maintenant le type d'insertion pour n <16, sinon commence par Quicksort et passe à Heapsort lorsque le nombre de partitions (profondeur de récursion?) Dépasse 2 * Log^N. Appelé: [Introsort] (https://en.wikipedia.org/wiki/Introsort) – Laoujin

Répondre

14

Il y a deux biggies.

Array.Sort (qui trie un tableau en place) utilise un unstableQuicksort.

Ceci est la même mise en œuvre utilisée en interne par List<T>.Sort, conformément à la documentation MSDN:

Cette méthode utilise Array.Sort, qui utilise l'algorithme QuickSort.

Le procédé Enumerable.OrderBy<TSource, TKey> (qui trie un exemplaire d'une séquence d'entrée) utilise un Quicksort stable . Pour autant que je sache, ce sont les deux seules implémentations de tri dans le .NET BCL.

4

Le MSDN Documentation indique que l'algorithme de tri utilisé est Quicksort (au moins pour les tableaux) - Cette option n'est pas sélectionnable ou personnalisable. Notez que ce n'est pas l'interface IComparable qui spécifie la méthode de tri à utiliser, c'est-à-dire la méthode ou la classe qui effectue le tri (normalement un tableau ou une liste, mais il peut s'agir de n'importe quelle méthode).

Cela signifie que si vous le souhaitez, vous pouvez implémenter votre propre méthode de tri en utilisant un algorithme alternatif.

Questions connexes