Welcher Sortieralgorithmus wird von .NET Array.Sort()
verwendet?Welcher Sortieralgorithmus wird von der Array.Sort() -Methode von .NET verwendet?
Antwort
Frage: Wenn das OP nicht speziell nach .NET 1.1 gefragt hat, warum sollte er einen Link zur .NET 1.1-Dokumentation geben? –
@John: Danke, habe nicht bemerkt, link fixed ... – CMS
.Net-Framework verwendet Introsort anstelle von einfachen schnellen sortieren von Version 4.5. http://en.wikipedia.org/wiki/Introsort – gordanvij
Es verwendet quick sort for sorting purpose
Schnell Art, wie erwähnt. Aber es ist nicht gleich gut für alle Daten!
Mit Reflektor: Es wird in einer nativen DLL -> für den häufigsten Fall von 1D-Arrays, aufsteigende Reihenfolge. Andere Fälle werden jedoch in verwaltetem Code sortiert - mit sehr wenigen Optimierungen. Daher ist ihre Geschwindigkeit normalerweise viel langsamer.
Eigentlich ist es nicht so einfach wie es scheint. Es sieht so aus, als ob .NET eine Reihe verschiedener Sortieralgorithmen implementiert, abhängig von der Eingabe und seiner Größe. Ich habe Array.Sort()
von CLR dekompiliert und es scheint, dass sie sowohl Heap, Insertion und Quicksort verwenden.
... wie es hier https://msdn.microsoft.com/en-us/library eindeutig dokumentiert ist /6tf1f0bc.aspx –
Array.Sort()
wählt einen von drei Sortieralgorithmus, abhängig von der Größe des Eingangs:
- Wenn die Größe weniger als 16 Elementen ist, verwendet es eine Insertion Sortieralgorithmus.
- Wenn die Größe überschreitet, wobei
N
der Bereich des Eingabearrays ist, wird ein Heap-Sort-Algorithmus verwendet. - Andernfalls verwendet es einen Quicksort Algorithmus
Quelle: Array.Sort(Array) Method on MSDN.
Sie müssen dieses Thema erneut lesen. Insbesondere ist Ihr Artikel # 2 falsch. Es basiert nicht auf der Größe der Eingabe, sondern auf der Anzahl der Partitionen. * "Array.Sort" implementiert Introsort, das in den meisten Fällen Quicksort verwenden soll (mit der zusätzlichen Optimierung der Verwendung von Insertion sort) für kleine Partitionen), aber wenn festgestellt wird, dass die Reihenfolge der Elemente zu einem pathologischen Fall für Quicksort führt, wird es in Heapsort geändert. –
Verwandte [thread] (https://Stackoverflow.com/q/148074/465053) im Zusammenhang mit der Stabilität des Algorithmus von sort-Methode verwendet. – RBT
Zugehörige [thread] (https://stackoverflow.com/q/2792074/465053): Wenn Sie stattdessen LINQ-basierte Sortierung verwenden. – RBT