Wie sortiert der folgende Code dieses Array in numerischer Reihenfolge?
var array=[25, 8, 7, 41]
array.sort(function(a,b){
return a - b
})
Ich weiß, dass, wenn das Ergebnis der Berechnung ist ...
Weniger als 0 : "a" ist so sortiert, dass es einen niedrigeren Index als "b" aufweist.
Null: "a" und "b" werden als gleich angesehen und es wird keine Sortierung durchgeführt.
Größer als 0: "b" ist so sortiert, dass es einen niedrigeren Index als "a" aufweist.
Wird die Array-Sortier-Rückruffunktion im Verlauf der Sortierung mehrmals aufgerufen?
Wenn ja, würde ich gerne wissen, welche zwei Zahlen jedes Mal an die Funktion übergeben werden. Ich nahm an, dass es zuerst "25" (a) und "8" (b) dauerte, gefolgt von "7" (a) und "41" (b), also:
25 (a) - 8 (b) = 17 (größer als Null, also sortiere "b", um einen niedrigeren Index als "a" zu haben): 8, 25
7 (a) - 41 (b) = -34 (kleiner als Null, also sortiere "a", um einen niedrigeren Index als "b" zu haben: 7, 41
Wie werden die beiden Zahlenreihen dann relativ zueinander sortiert?
Bitte helfen Sie einem kämpfenden Neuling!
Antworten:
Ja
Sie könnten sich selbst herausfinden mit:
BEARBEITEN
Dies ist die Ausgabe, die ich habe:
quelle
array.sort((a,b) => a - b);
ist eine gültige SyntaxDer JavaScript-Interpreter verfügt über eine Art Sortieralgorithmus implementiert. Es ruft die Vergleichsfunktion einige Male während des Sortiervorgangs auf. Wie oft die Vergleichsfunktion aufgerufen wird, hängt vom jeweiligen Algorithmus, den zu sortierenden Daten und der Reihenfolge vor der Sortierung ab.
Einige Sortieralgorithmen weisen bei bereits sortierten Listen eine schlechte Leistung auf, da sie weitaus mehr Vergleiche anstellen als im typischen Fall. Andere kommen mit vorsortierten Listen gut zurecht, haben aber andere Fälle, in denen sie zu schlechten Leistungen "verleitet" werden können.
Es gibt viele häufig verwendete Sortieralgorithmen, da kein einzelner Algorithmus für alle Zwecke perfekt ist. Die beiden am häufigsten für die generische Sortierung verwendeten sind Quicksort und Merge Sort . Quicksort ist oft die schnellere von beiden, aber die Zusammenführungssortierung hat einige nette Eigenschaften, die es zu einer besseren Gesamtauswahl machen können. Die Zusammenführungssortierung ist stabil , Quicksort hingegen nicht. Beide Algorithmen sind parallelisierbar, aber die Funktionsweise der Zusammenführungssortierung macht eine parallele Implementierung effizienter, wenn alle anderen gleich sind.
Ihr spezieller JavaScript-Interpreter verwendet möglicherweise einen dieser Algorithmen oder etwas ganz anderes. Der ECMAScript- Standard legt nicht fest, welchen Algorithmus eine konforme Implementierung verwenden muss. Es wird sogar ausdrücklich das Bedürfnis nach Stabilität abgelehnt.
quelle
Wertepaare werden paarweise verglichen. Die verglichenen Paare sind ein Implementierungsdetail. Gehen Sie nicht davon aus, dass sie in jedem Browser gleich sind. Der Rückruf kann beliebig sein (Sie können also Zeichenfolgen oder römische Ziffern sortieren oder alles andere, wo Sie eine Funktion finden können, die 1,0, -1 zurückgibt).
Bei der Sortierung von JavaScript ist zu beachten, dass die Stabilität nicht garantiert werden kann.
quelle
Wird die Array-Sortier-Rückruffunktion im Verlauf der Sortierung mehrmals aufgerufen?
Ja, genau das ist es. Der Rückruf wird verwendet, um Elementpaare im Array nach Bedarf zu vergleichen, um zu bestimmen, in welcher Reihenfolge sie sein sollen. Diese Implementierung der Vergleichsfunktion ist beim Umgang mit einer numerischen Sortierung nicht untypisch. Details in der Spezifikation oder auf einigen anderen mehr lesbaren Seiten.
quelle
Da es sich bei N Elementen um eine Vergleichssortierung handelt, sollte die Rückruffunktion für eine schnelle Sortierung wie Quicksort durchschnittlich (N * Lg N) Mal aufgerufen werden . Wenn der verwendete Algorithmus so etwas wie Bubble Sort ist , wird die Rückruffunktion durchschnittlich (N * N) Mal aufgerufen.
Die Mindestanzahl von Aufrufen für eine Vergleichssortierung beträgt (N-1). Dies dient nur zum Erkennen einer bereits sortierten Liste (dh zu einem frühen Zeitpunkt in der Blasensortierung, wenn keine Swaps auftreten).
quelle
Tiefes Wissen
Wenn das Ergebnis negativ ist, wird a vor b sortiert.
Wenn das Ergebnis positiv ist, wird b vor a sortiert.
Wenn das Ergebnis 0 ist, werden keine Änderungen an der Sortierreihenfolge der beiden Werte vorgenommen.
HINWEIS:
Dieser Code ist die Ansicht innerhalb des Sortierverfahren Schritt für Schritt.
AUSGABE:
quelle
Führen Sie diesen Code aus. Sie können den genauen Sortiervorgang Schritt für Schritt vom Anfang bis zum Ende sehen.
quelle
AUSGABE
In meinem Browser (Google Chrome Version 70.0.3538.77 (Official Build) (64-Bit)) in der ersten Iteration ist das Argument a das zweite Element in einem Array und das Argument b das erste Element eines Arrays.
wenn die Vergleichsfunktion zurückkehrt
quelle