Schnellste Möglichkeit, ein Array in absteigender Reihenfolge zu sortieren
Warum ist der folgende code
Array.Sort(values);
Array.Reverse(values);
viel schneller beim Sortieren eines Arrays in absteigender Reihenfolge im Vergleich zu
Array.Sort(values, (a,b)=>(-a.CompareTo(b)));
Code ausgeführt wurde, in den Release-Modus, die außerhalb des Debuggers.
Was ist die effizienteste Weise zu produzieren, die eine absteigende Sortierung für arrays, vorzugsweise in einem one-liner?
InformationsquelleAutor der Frage Projectile Fish | 2011-07-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist eine gute Frage. Ich Wette, Ihre Werte-array ist ein array von primitiven Typ!
Es ist wirklich die Art, die hier herrscht, weil die Komplexität der Rückseite ist O(n), während das Sortieren ist O(n logn).
Die Sache ist, dass beim Sortieren von primitiven Typen .NETTO ruft tatsächlich eine native Funktion, die extrem schnell - viel schneller, mit einem Vergleich oder Komparator.
Die Funktion aufgerufen wird
TrySZSort
:und hier ist, wie es heißt in der Array-Klasse:
InformationsquelleAutor der Antwort Petar Ivanov
Als link Punkte aus
InformationsquelleAutor der Antwort V4Vendetta
Delegierten.
Den Aufruf des Delegaten ist viel langsamer als der Standard-Aufruf zu
IComparable.CompareTo
Update:
Wenn Sie möchten, dass die gleiche (oder schließen), Geschwindigkeit, die Umsetzung der
IComparer
- Schnittstelle und übergeben, die an die sort-Methode.http://msdn.microsoft.com/en-us/library/bzw8611x
InformationsquelleAutor der Antwort leppie
Weil in Ihrer zweiten version hat es zum aufrufen von Ihr eine (anonyme) Funktion jedes mal ein vergleichen und dann zu rufen .CompareTo-innen, so dass Sie zwei indirections, in der Erwägung, dass andernfalls kann es verwenden build-in-Vergleiche (für primitive Typen).
Grundsätzlich zahlen Sie für Funktionsaufruf-overhead, die ich Wette, die werden eliminiert, die für native primitive Typen, wenn Sie diese Arten von Operationen. Obwohl technisch möglich (denke ich), ich bezweifle, dass der Jitter ist in der Lage, vollständig inline-Sie in Ihrem zweiten Fall.
InformationsquelleAutor der Antwort chrisaut