docs
This commit is contained in:
45
timsort.md
Normal file
45
timsort.md
Normal file
@ -0,0 +1,45 @@
|
||||
# Timsort
|
||||
|
||||
- Hybrid aus Insertion und Mergesort
|
||||
- weniger als 64 Elemente: Insertionsort
|
||||
|
||||
## Insertionsort
|
||||
|
||||
- erste Element des unsortierten Arrays in das sortierte Array kopiert
|
||||
- Danach wird geschaut, ob das zweite Element größer als das letzte Element im sortierten Array ist. Dann wird es rechts davon einsortiert
|
||||
- Ansonsten wird der Index vom zu überprüfenden Element halbiert und von vorne begonnen
|
||||
- In der Mitte des eingegrenzten Bereiches wird überprüft, ob das Element größer oder kleiner ist, so wird der mögliche Bereich mit jedem Mal halbiert
|
||||
- Nachdem die richtige Stelle gefunden wurde, wird die Zahl dort eingeschoben
|
||||
|
||||
## Runs
|
||||
|
||||
- Das unsortierte Array wird in Runs aufgeteilt
|
||||
- jeder Runs hat eine Mindestgröße, den minrun, normlerweise zwischen 32 und 64
|
||||
- viele Daten enthalten bereits sortierte Teile
|
||||
- Aufsteigende und aufsteigende Reihe werden erkannt
|
||||
- absteigende Reihen werden umgekehrt
|
||||
|
||||
## Merge
|
||||
|
||||
- jeweiles zwei Arrays werden gemerged
|
||||
- Überprüfung am Anfang welches Arrays die Zahl kleiner ist
|
||||
- kopieren der Zahl in das sortierte Array und lösche der Zahl im Ursprungsarray
|
||||
- nach einem Durchgang nur noch die Hälfte der Arrays
|
||||
- wiederholen bis alle Zahlen im einen Array sind
|
||||
|
||||
### Galloping
|
||||
|
||||
- wenn 7 mal in Folge die kleinere Zahl im selben Array ist
|
||||
- wird nach der Zahl des anderen Arrays, welche als nächstes einsortiert wird, im ersten Array gesucht
|
||||
- alles von der aktuellen Position bis zur gefundenen Position des ersten Arrays wird in das sortierte Array kopiert
|
||||
|
||||
## Quellen
|
||||
|
||||
https://www.youtube.com/watch?v=_dlzWEJoU7I
|
||||
https://en.wikipedia.org/wiki/Timsort
|
||||
https://en.wikipedia.org/wiki/Exponential_search
|
||||
https://www.geeksforgeeks.org/timsort/
|
||||
|
||||
## Code
|
||||
|
||||
https://git.redstoneunion.de/MrGeorgen/timsort
|
||||
Reference in New Issue
Block a user