Datastructuren en algoritmen

Een array van 10 elementen wordt met insertion sort oplopend gesorteerd. Elk element vanaf het tweede wordt eruit gehaald en vergeleken met de elementen links ervan, te beginnen bij de linkerbuur, tot een element kleiner dan of gelijk aan de waarde is gevonden of het begin is bereikt. Hoeveel vergelijkingen zijn er nodig als de array al oplopend staat, en als hij aflopend staat?

  1. AIn beide gevallen 45
  2. B10 en 100
  3. C9 en 45
Antwoord en toelichting tonen

Antwoord: C. 9 en 45

Staat de array al oplopend, dan heeft elk element maar één vergelijking met zijn linkerbuur nodig, dus de 9 elementen vragen in totaal 9 vergelijkingen. Staat hij aflopend, dan wordt het als i-de uitgehaalde element vergeleken met alle i elementen links ervan, wat 1 + 2 + … + 9 = 45 geeft. Insertion sort hangt dus sterk af van de invoer, met O(n) in het beste en O(n²) in het slechtste geval, en is zeer snel op bijna gesorteerde gegevens. Shellsort benut dit door eerst insertion sort uit te voeren op elementen die een afstand uit elkaar liggen, en ook Timsort gebruikt insertion sort voor korte stukken.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Datastructuren en algoritmen

  1. Welk sorteeralgoritme heeft ook in het slechtste geval tijdcomplexiteit O(n log n) en sorteert met nauwelijks extra geheugen, zoals een werkarray?
  2. De records (naam, score) (A, 80), (B, 70), (C, 80), (D, 70) staan in deze volgorde. In welke volgorde staan de namen als ze met een stabiel sorteeralgoritme oplopend op score worden gesorteerd?
  3. In welk typisch geval heeft quicksort tijdcomplexiteit O(n²)?
  4. Bij mergesort worden de twee gesorteerde reeksen 1, 4, 7, 9 en 2, 3, 8, 10 samengevoegd (merge) tot één reeks door herhaaldelijk de voorste elementen te vergelijken en het kleinste uit te voeren. Is één reeks leeg, dan wordt de rest van de andere zonder vergelijking uitgevoerd. Hoeveel vergelijkingen zijn er nodig?
  5. Een binaire heap wordt opgeslagen in een array a[0], a[1], a[2], … met de wortel in a[0], waarbij elk niveau van bovenaf van links naar rechts wordt gevuld. Wat zijn de kinderen en de ouder van a[4]?