# Zahlen sortieren



## programmierer123 (26. Jan 2018)

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?


----------



## Robat (26. Jan 2018)

Strings in javascript werden dort implizit in Number umgewandelt. 
Je nach dem was bei a-b raus kommt (<0, 0 oder >0) gibt an ob a>b, a==b oder a<b ist.


----------



## programmierer123 (27. Jan 2018)

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.


----------



## mrBrown (27. Jan 2018)

Die zurückgegebene Zahl gibt nur das Verhältnis der Zahlen zueinander an.
Die 3 bedeutet, wie @Robat auch schrieb, dass a<b gilt.


----------



## programmierer123 (27. Jan 2018)

Sorry, das verstehe ich nicht.


----------



## Robat (27. Jan 2018)

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}

```
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 (27. Jan 2018)

> d.h. a und b werden getauscht, da gilt: a > b



Ok, aber diese Logik ist doch nirgendwo implementiert. Es wird nur überprüft ob a > b. Ein Umtauschen findet aber nicht statt.


----------



## mrBrown (27. Jan 2018)

Natürlich ist das implementiert, was denkst du denn, was `points.sort` macht?


----------



## programmierer123 (28. Jan 2018)

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 (28. Jan 2018)

*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 (28. Jan 2018)

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 (29. Jan 2018)

programmierer123 hat gesagt.:


> 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.


Robat hat gesagt.:


> 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





programmierer123 hat gesagt.:


> Das Iterieren über das ganze Array macht die sort-Funktion und muss daher nicht implementiert werden?


Sozusagen. Sortieren ist nicht einfach iterieren.


----------

