Beruflich Dokumente
Kultur Dokumente
Idee: Der Algorithmus bestimmt zwei Laufvariablen, die mit Start-, bzw. Endindex des zu sortierenden Arrays initialisiert werden. Nun sollen diese Variablen i, j jeweils zu Mitte laufen, wobei jedes Mal, wenn zwei Indices gefunden wurden, deren zugeschriebener Wert nicht in die entsprechende Arrayhlfte passt, eine Vertauschung der Werte an Platz i und j vorgenommen wird. Dieser Vorgang luft so lange, wie i < j.
Pseudo-Code:
Sort-Neg-Pos(A) i <- 1 1 j <- Lenght(A) 2 while i < j do 3 while i < j and A[i] < 0 do 4 i <- i + 1 5 while i < j and A[j] > 0 do 6 j <- j - 1 7 A[i] <-> A[j] 8 i <- i + 1 9 10 j <- j -1 11 return A
beschrieben wurde und somit in Zeile 11 das korrekt sortierte Array ausgegeben wird (Linke Seite: 1 bis (i 1) Rechte Seite: i bis n. Anz. Der Elemente links: i-1, Anz. Der Elemente rechts: n j Also msste die Anzahl aller Elemente beschrieben werden durch: i-1 + n-j ; da i = j + 1 folgt Anz = (j+1)-1 + n j = n). Fall i = j: Die Schleife terminiert natrlich auch in diesem Fall, da i < j nicht mehr gilt. Nun ergibt sich aber das Problem, dass nach der Invariante noch nicht das gesamte Array untersucht wurde, es fehlt nmlich das Element an der Stelle i=j. Allerdings wurde das Array ja von links und von rechts aufeinander zulaufend sortiert, d.h. das Element i = j steht genau zwischen der linken Seite, den negativen und der rechten Seite, den positiven Werten. Es ist von daher egal ob A[i=j] positiv oder negativ ist, es steht bereits an der richtigen stelle, und somit wird in Zeile 11 ein korrekt sortiertes Array zurckgegeben. Anz. der Elemente links: i ; Anz. der Elemente rechts: n j ; da i = j folgt fr die Gesamtanzahl der Elemente n j + i = n i + i = n.
Speicherplatzbedarf:
Dieser Algorithmus arbeitet in-place , er arbeitet also innerhalb des bergebenen Arrays und braucht deshalb zunchst einmal nur Speicher in der Grenordnung O(n). Dazu kommen dann konstante Werte zum Speichern von i und j, also immer noch O(n). Temporr knnte dann noch ein konstanter Speicher fr das Zwischenspeichern einer Variable in Zeile 8 dazukommen, was die Gesamt-Grenordnung allerdings auch nicht erhht, da der lineare Term die konstanten dominiert => O(n).
Laufzeitanalyse: