8 Stimmen

Welcher Sortieralgorithmus wird von .net im IComparer verwendet

Weiß jemand, welcher Sortieralgorithmus von .net verwendet wird, wenn wir die IComparer in unserer Klasse?

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

10voto

bdukes Punkte 144019

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.

8voto

Razvan Punkte 188

El aktuelle Dokumentation sagt, es verwendet eine Art von Introsort ein hybrider Sortieralgorithmus:

Das funktioniert folgendermaßen:

  1. Wenn die Partitionsgröße weniger als 16 Elemente beträgt, verwendet es eine Einlegesortierung Algorithmus

  2. Wenn die Anzahl der Partitionen 2 * LogN überschreitet, wobei N der Bereich ist des Eingabefeldes ist, verwendet es eine Heapsort Algorithmus.

  3. Andernfalls verwendet es eine Quicksort Algorithmus.

    Quelle hier

3voto

Konrad Rudolph Punkte 503837

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X