Heapsort
Nedan följer en exempelimplementation av Heapsort i Python.
Du kan läsa mer om Heapsort på Wikipedia och om den trädbaserade datastrukturen heap som algoritmen bygger på i boken av Miller & Ranum. Ni bör också söka ytterligare källor via t.ex. Google.
En bra visualisering av hur in-place-versionen av Heapsort fungerar kan ni se på Youtube.
Notera att den enda funktionen som är rekursiv i exemplet nedan är sift_down
och den rekursionen kan enkelt bytas ut mot en while
-loop (pseudokodexemplet på Wikipedia använder t.ex. while
istället för rekursion). Det är dock naturligt att använda rekursion här eftersom vi trots allt arbetar med en form av träd, dvs en rekursiv datastruktur. I jämförelse med Quicksort och Mergesort, som är fundamentalt rekursiva algoritmer, är dock Heapsort en iterativ algoritm som använder en rekursiv datastruktur.
Med en separat heap representerad som en lista
|
|
Med en separat heap som en egen klass
Eftersom vi börjat titta på objektorientering kan det vara intressant att se hur vi skulle kunna implementera datastrukturen som en klass.
|
|
In-place
Här gör vi om själva listan vi sorterar till en heap som ett steg på vägen. Sedan bygger vi upp den sorterade listan element för element från slutet av listan och framåt.
|
|
Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2024-10-16