Datenstrukturen und Algorithmen

Ein Array mit 10 Elementen wird mit Insertionsort aufsteigend sortiert. Jedes Element ab dem zweiten wird herausgenommen und mit den Elementen links davon verglichen, beginnend beim linken Nachbarn, bis ein Element gefunden wird, das kleiner oder gleich ist, oder der Anfang erreicht ist. Wie viele Vergleiche sind nötig, wenn das Array bereits aufsteigend sortiert ist, und wie viele, wenn es absteigend sortiert ist?

  1. AIn beiden Fällen 45
  2. B10 und 100
  3. C9 und 45
Antwort und Erläuterung anzeigen

Antwort: C. 9 und 45

Ist das Array bereits aufsteigend sortiert, braucht jedes Element nur einen Vergleich mit seinem linken Nachbarn, die 9 Elemente also insgesamt 9 Vergleiche. Ist es absteigend sortiert, wird das als i-tes herausgenommene Element mit allen i Elementen links davon verglichen, was 1 + 2 + … + 9 = 45 ergibt. Insertionsort hängt also stark von der Eingabe ab, mit O(n) im besten und O(n²) im schlechtesten Fall, und ist bei nahezu sortierten Daten sehr schnell. Shellsort nutzt das aus, indem es zuerst Insertionsort auf Elemente im Abstand einer Lücke anwendet, und auch Timsort verwendet Insertionsort für kurze Teilfolgen.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Datenstrukturen und Algorithmen

  1. Welches Sortierverfahren hat auch im schlechtesten Fall die Komplexität O(n log n) und sortiert fast ohne zusätzlichen Speicher wie ein Arbeitsarray?
  2. Die Datensätze (Name, Punktzahl) (A, 80), (B, 70), (C, 80), (D, 70) liegen in dieser Reihenfolge vor. In welcher Reihenfolge erscheinen die Namen, wenn mit einem stabilen Sortierverfahren aufsteigend nach Punktzahl sortiert wird?
  3. In welchem typischen Fall benötigt Quicksort O(n²) Zeit?
  4. Bei Mergesort werden die beiden sortierten Folgen 1, 4, 7, 9 und 2, 3, 8, 10 zu einer zusammengeführt (Merge), indem wiederholt die vordersten Elemente verglichen und das kleinere ausgegeben wird. Ist eine Folge leer, wird der Rest der anderen ohne Vergleich ausgegeben. Wie viele Vergleiche werden durchgeführt?
  5. Ein binärer Heap wird mit der Wurzel in a[0] in einem Array a[0], a[1], a[2], … gespeichert, wobei jede Ebene von oben beginnend von links nach rechts aufgefüllt wird. Welches sind die Kinder und der Elternknoten von a[4]?