Insertsort, Variante 4

Hierbei handelt es sich um eine Alternative zu Variante 3, die besonders für einfachverkettete Listen geeignet ist.

Variante 4.a (iterativ)
Typ alternativ, optimiert
Eigenschaften iterativ, in-place, stabil, nicht parallelisierbar
Datenstrukturen einfachverkettete Listen, Felder
Speicher Ω(1) Θ(1) Ο(1)
Laufzeit Ω(n) Θ(n²) Ο(n²)
Vergleiche n n²/4 n²/2
Verschiebungen 0 n n

insertsort(list A, int l, int r) {
  for i:=l+1 to r do {
    j:= l;
    while (j < i) and (A[j] <= A[i]) do {
      j++;
    }
    move(A[i], A[j]);
  }
}

Variante 4.b (rekursiv)
Typ alternativ, optimiert
Eigenschaften rekursiv, in-place, stabil, nicht parallelisierbar
Datenstrukturen einfachverkettete Listen, Felder
Speicher Ω(n) Θ(n) Ο(n)
Laufzeit Ω(n) Θ(n²) Ο(n²)
Vergleiche n n²/4 n²/2
Verschiebungen 0 n n

insertsort(field A, int l, int r) {
  if (l < r) then {
    insertsort(A, l, r-1);
    insert(A, l, r, r);
  }
}

insert(field A, int l, int r, int q) {
  if (l < r) and (A[l] <= A[q]) then {
    insert(A, l+1, r, q);
  } else {
    move(A[q], A[l]);
  }
}


Insertsort, Variante 4