FOR j := 1 TO n DIV 2 DO
FOR i := 0, 2, 4, ... DO IN PARALLEL
Compare_Exchange
(ai,ai + 1)
END
FOR i := 1, 3, 5, ... DO IN PARALLEL
Compare_Exchange
(ai,ai + 1)
END
END
7-3 6-5 8-1 4-2 3 7-5 6-1 8-2 4 3-5 7-1 6-2 8-4 3 5-1 7-2 6-4 8 3-1 5-2 7-4 6-8 1 3-2 5-4 7-6 8 1-2 3-4 5-6 7-8 1 2-3 4-5 6-7 8
Offenbar sind für manche Eingaben mindestens n Iterationen
erforderlich (z.B. wenn die größte Zahl vorne steht).
Wandern des Maximums beim Odd-Even-Transposition Sort (a) | |
Zusammengesetzter neuer Schedule mit n - 1 Zahlen (b) |
Die Kosten betragen also O(n 2) , daher liegt kein
kostenoptimaler Algorithmus vor.
Es seien nun p < n Prozessoren vorhanden.
Jeder Prozessor speichert zu Beginn n/p Zahlen.
Zunächst sortiert jeder Prozessor Pi seine Folge
sequentiell zu Si .
Dies dauert
In jeder Iteration wird statt
compare-exchange
(ai,ai + 1)
jetzt merge-and-split
(Si,Si + 1) aufgerufen.
Diese Prozedur tauscht zwei sortierte Listen aus, mischt sie
und entfernt dann den jeweils kleineren bzw. größeren
Teil.
Dauer = O(n/p) .
Bei p Iterationen entsteht also als Gesamtzeit
O( · log ) + p · O() und bei
p Prozessoren als Kosten
O(n · log ) + O(n · p) .
Für p < log n ist dies
O(n · log n) , somit liegt ein
kostenoptimaler Algorithmus vor.