58 lines
2.1 KiB
Markdown
58 lines
2.1 KiB
Markdown
# SimulationTuplesort
|
|
|
|
ein Tool zur Simulation der verschiedenen Sortierverfahren in einer Anlage:
|
|
- picksort und
|
|
- tuplesort.
|
|
|
|
## Picksort-Verfahren
|
|

|
|
|
|
|
|
|
|
Das Picksort Verfahren holt sich bei jeder Umdrehung das kleinstmögliche Objekt aus dem ersten Kreisel heraus. Daraus ergibt sich im zweiten Kreisel eine sortierte List der Bügelträger
|
|
|
|
Zur Vermittelung der einzelnen Schritte wurden folgender Unittest umgesetzt:
|
|
|
|
```python
|
|
lK = Roundabout()
|
|
lK.addList([6, 5, 4, 3, 2, 1])
|
|
rK = Roundabout(1)
|
|
sw = Switch(lK, rK)
|
|
p = RoundaboutPair(lK, rK, sw)
|
|
self.assertEqual(lK.content(), [1, 2, 3, 4, 5, 6])
|
|
|
|
p.runSimulation()
|
|
self.assertEqual(p.show(), ([], [1, 2, 3, 4, 5, 6]))
|
|
```
|
|
## Tuplesort-Verfahren
|
|

|
|
|
|
Das Tupelsort Verfahren arbeitet mit sog. Tupels. Dies sind Zahlenfolge die immer Aufsteigend sind.
|
|
Eine Zahlenfolge wie z.B. 1, 3, 5, 10, 2, 4, 7, 5, 8 kann in 3 Tupels unterteilt werden. Immer wenn sich in den Zahlen ein Sprung nach unten befindet definiert man ein Tupelende. Aus dieser Zahlenfolge ergeben sich beispielsweise die 3 Tuple 1,3, 5, 10 | 2, 4, 7 | 5, 8 .
|
|
Durch zusammenfügen der Einzeltupel ergibt sich am Ende eine sortierte folge.
|
|
Das Tupelsort verfahren hat bei einer grösseren Anzal von Elementen im Kreisel eine bessere Sortierperformance.
|
|
|
|
Zur Vermittelung der einzelnen Schritte wurden folgender Unittest umgesetzt:
|
|
|
|
```python
|
|
lK = Roundabout()
|
|
lK.addList([3, 2, 1])
|
|
rK = Roundabout(1)
|
|
rK.addList([6, 5, 4])
|
|
sw = Switch(lK, rK)
|
|
p = RoundaboutPair(lK, rK, sw)
|
|
sw.set_to_right()
|
|
self.assertEqual(p.show(), ([1, 2, 3], [6, 5, 4]))
|
|
|
|
p.sortStepTupleSort()
|
|
self.assertEqual(p.show(), ([1, 2], [5, 4, 3, 6]))
|
|
p.sortStepTupleSort()
|
|
self.assertEqual(p.show(), ([5, 2, 1], [4, 3, 6]))
|
|
p.sortStepTupleSort()
|
|
self.assertEqual(p.show(), ([5, 2], [3, 6, 1, 4]))
|
|
p.sortStepTupleSort()
|
|
self.assertEqual(p.show(), ([6, 5, 3, 2], [1, 4]))
|
|
p.sortStepTupleSort()
|
|
self.assertEqual(p.show(), ([], [1, 2, 3, 4, 5, 6]))
|
|
```
|