Simplesort, Variante 1 (Original)

Hierbei handelt es sich um die Original-Variante.

Analog zu Bubblesort (Variante 3) sind hier ebenfalls einige Optimierungen möglich. Die Realisierung wäre jedoch etwas komplizierter.

Mit etwas Geschick ist diese Variante parallelisierbar. Genauere Informationen dazu finden sie in Variante 4.

Variante 1.a (iterativ)
Typ standard
Eigenschaften iterativ, in-place, stabil, parallelisierbar
Datenstrukturen Felder, einfachverkettete Listen
Speicher Ω(1) Θ(1) Ο(1)
Laufzeit (p) Ω(n) Θ(n) Ο(n)
Laufzeit Ω(n²) Θ(n²) Ο(n²)
Vergleiche n²/2 n²/2 n²/2
Vertauschungen 0 n²/16 n²/2

simplesort(field A, int l, int r) {
  for i:=r downto l+1 do pipelined {
    for j:=l to i-1 do {
      if (A[j] >= A[i]) then {
        exchange(A[j], A[i]);
      }
    }
  }
}

Variante 1.b (rekursiv)
Typ standard
Eigenschaften rekursiv, in-place, stabil, parallelisierbar
Datenstrukturen Felder, einfachverkettete Listen
Speicher Ω(n) Θ(n) Ο(n)
Laufzeit (p) Ω(n) Θ(n) Ο(n)
Laufzeit Ω(n²) Θ(n²) Ο(n²)
Vergleiche n²/2 n²/2 n²/2
Vertauschungen 0 n²/16 n²/2

simplesort(field A, int l, int r) {
  if (l < r) then {
    do pipelined {
      simple(A, l, r);
      simplesort(A, l, r-1);
    }
  }
}

simple(field A, int l, int r) {
  if (l < r) then {
    if (A[l] >= A[r]) then {
      exchange(A[l], A[r]);
    }
    simple(A, l+1, r);
  }
}


Simplesort, Variante 1