Datastructuren en algoritmen

Welk sorteeralgoritme heeft ook in het slechtste geval tijdcomplexiteit O(n log n) en sorteert met nauwelijks extra geheugen, zoals een werkarray?

  1. AMergesort
  2. BHeapsort
  3. CQuicksort
Antwoord en toelichting tonen

Antwoord: B. Heapsort

Heapsort bouwt een binaire heap in de array zelf op, verwisselt herhaaldelijk het maximum in de wortel met het laatste element en maakt de heap kleiner. Daardoor kost het ook in het slechtste geval O(n log n) en is er maar een constante hoeveelheid extra geheugen nodig. Mergesort is in het slechtste geval ook O(n log n), maar heeft op een array een werkgebied nodig dat evenredig is met n. Quicksort is gemiddeld O(n log n) en in de praktijk snel, maar kan afhankelijk van de keuze van de pivot en de gegevens O(n²) worden. Merk op dat heapsort elementen vergelijkt die ver uit elkaar liggen, waardoor het cachegebruik inefficiënt is, en dat het niet stabiel is.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Datastructuren en algoritmen

  1. 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?
  2. In welk typisch geval heeft quicksort tijdcomplexiteit O(n²)?
  3. 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?
  4. 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]?
  5. Een max-heap, waarin de waarde van elke ouder minstens zo groot is als die van zijn kinderen, wordt opgeslagen in een array met de wortel in a[0]. Aan de heap 50, 30, 40, 10, 20, 35 wordt 45 toegevoegd door de waarde achteraan te plaatsen en haar met haar ouder te verwisselen zolang ze groter is dan die ouder. Hoe ziet de array er daarna uit?