Zahlen sortieren

programmierer123

Aktives Mitglied
Hallo,
wenn man Strings als Zahlen in JavaScript sortieren will, dann findet man im Internet diese Funktion:

function sortNumber(a,b) {
return a - b;
}

points.sort(function(a,b){return a-b});

Wenn man der Sortierfunktion aber a-b zurückgibt, dann wird doch der eigentliche Wert verfälscht?
 

programmierer123

Aktives Mitglied
Wenn das Sortierfeld aus {4, 1, 6} besteht.
Dann kommt in die Funktion 4-1 (=3) zurück. D.h. die 3 wird sortiert obwohl, diese nicht mal in der Sortiermenge dabei ist.
 

Robat

Top Contributor
Noch mal zur Erinnerung:
- Wenn a - b > 0 .. dann ist a größer als b
- Wenn a - b = 0 .. dann ist a gleich b
- Wenn a - b < 0 .. dann ist a kleiner b

Folgendes Beispiel: {4, 1, 6}
Code:
1. Durchlauf a = 4, b = 1
    a - b = 4 - 1 = 3 ... 3 ist größer als 0 .. d.h. a und b werden getauscht, da gilt: a > b
    Liste sieht jetzt so aus: {1,4,6}
2. Durchlauf a = 4, b = 6
    a - b = 4 - 6 = -2 .. -2 ist kleiner als 0 .. d.h. a und werden nicht getauscht, da bereits gilt: a < b
    Liste sieht jetzt so aus: {1,4,6}
Jetzt ist die Liste sortiert und es müssen keine Elemente mehr vertauscht werden
 

programmierer123

Aktives Mitglied
Ok, und warum kann man als Parameter nicht einfach zwei Variablen übergeben und muss gleich eine anonyme function übergeben?

Es gibt nirgendwo eine for-Schleife, in der über das ganze Array iteriert wird. Warum werden also alle Zahlen des Arrays verglichen?
 

Robat

Top Contributor
Wie oft / mit welchen Algorithmus die Zahlen sortiert werden ist schon implementiert. Das macht die sort Funktion für dich.

Wonach die Zahlen sortiert werden übergibst du der Funktion als Parameter. Die callback Funktion die du dort übergibst bestimmt ja letztenendes nur ob auf - oder absteigend sortiert wird.
 

programmierer123

Aktives Mitglied
Ok, die Sortfunktion erwartet als Parameter einen Vergleich.
Kommt eine Zahl größer 0 raus, dann wird die Reihenfolge geändert. Bei einer Zahl kleiner 0 wird die Reihenfolge beibehalten.
Das Iterieren über das ganze Array macht die sort-Funktion und muss daher nicht implementiert werden?
 

Flown

Administrator
Mitarbeiter
Kommt eine Zahl größer 0 raus, dann wird die Reihenfolge geändert. Bei einer Zahl kleiner 0 wird die Reihenfolge beibehalten.
Lese bitte nochmal die letzten Beiträge durch.
Noch mal zur Erinnerung:
- Wenn a - b > 0 .. dann ist a größer als b
- Wenn a - b = 0 .. dann ist a gleich b
- Wenn a - b < 0 .. dann ist a kleiner b
Das Iterieren über das ganze Array macht die sort-Funktion und muss daher nicht implementiert werden?
Sozusagen. Sortieren ist nicht einfach iterieren.
 

Neue Themen


Oben