Weiß jemand, welcher Sortieralgorithmus von .net verwendet wird, wenn wir die IComparer
in unserer Klasse?
Antworten
Zu viele Anzeigen?QuickSort scheint es zu sein.
Die Dokumentation über IComparer sagt
Diese Schnittstelle wird in Verbindung mit dem Array.Sortieren y Array.BinarySearch Methoden.
El Array.Sortieren Dokumentation sagt
Diese Methode verwendet den QuickSort-Algorithmus. Diese Implementierung führt eine instabile Sortierung durch, d. h. wenn zwei Elemente gleich sind, bleibt ihre Reihenfolge möglicherweise nicht erhalten. Im Gegensatz dazu wird bei einer stabilen Sortierung die Reihenfolge der gleichen Elemente beibehalten.
El aktuelle Dokumentation sagt, es verwendet eine Art von Introsort ein hybrider Sortieralgorithmus:
Das funktioniert folgendermaßen:
-
Wenn die Partitionsgröße weniger als 16 Elemente beträgt, verwendet es eine Einlegesortierung Algorithmus
-
Wenn die Anzahl der Partitionen 2 * LogN überschreitet, wobei N der Bereich ist des Eingabefeldes ist, verwendet es eine Heapsort Algorithmus.
-
Andernfalls verwendet es eine Quicksort Algorithmus.
Nach Angaben der MSDN .NET verwendet QuickSort. Übrigens hängt die Methode absolut nicht vom Komparator ab (solange er vergleichsbasiert ist), warum sollte .NET also eine andere Methode verwenden, je nachdem, ob Sie einen benutzerdefinierten Komparator bereitstellen oder nicht?
2 Stimmen
Dies hat sich geändert seit .NET 4.5: Jetzt Insertion Sort für n<16, sonst beginnt mit Quicksort und schaltet auf Heapsort um, wenn die Anzahl der Partitionen (Rekursionstiefe?) 2 * Log^N überschreitet. Aufgerufen: Introsort
0 Stimmen
@Laoujin Und welcher Algorithmus wird verwendet von
Enumerable.OrderBy
?0 Stimmen
stackoverflow.com/a/2792159/540352