Heap sort ( eng. Heapsort , "Heap sort" [1] ) er en sorteringsalgoritme , der fungerer i det værste, i gennemsnit og i det bedste tilfælde (det vil sige garanteret) til operationer ved sortering af elementer. [2] Mængden af brugt backend-hukommelse afhænger ikke af størrelsen af arrayet (det vil sige ).
Kan opfattes som en forbedring af boblesortering , hvor et element flyder ( min-heap ) / synker ( max-heap ) over mange stier.
Heapsort blev foreslået af J. Williams i 1964. [en]
Heapsort bruger et binært sorteringstræ . Et sorteringstræ er et træ, der opfylder følgende betingelser:
En bekvem datastruktur for et sorteringstræ er en matrix Array, som Array[0] er elementet ved roden, og elementets børn Array[i]er Array[2i+1]og Array[2i+2].
Sorteringsalgoritmen vil bestå af to hovedtrin:
1. Byg elementerne i arrayet i form af et sorteringstræ :
kl .
Dette trin kræver operation.
2. Vi fjerner elementer fra roden et ad gangen og genopbygger træet. Det vil sige, ved det første trin udveksler vi Array[0]og Array[n-1]transformerer Array[0], Array[1], … , Array[n-2]til et sorteringstræ. Derefter omarrangerer vi Array[0]og Array[n-2], transformerer Array[0], Array[1], … , Array[n-3]til et sorteringstræ. Processen fortsætter, indtil der kun er ét element tilbage i sorteringstræet. Så Array[0]er , Array[1], … , Array[n-1] en ordnet sekvens.
Dette trin kræver operation.
Fordele
Fejl
O ( n ) hukommelseskrævende flettesortering er hurtigere ( med en mindre konstant) og forringes ikke på dårlige data.
På grund af kompleksiteten af algoritmen opnås forstærkningen kun for store n . På lille n (op til flere tusinde) er Shellsort hurtigere .
Algoritmen "heap sort" bruges aktivt i Linux-kernen .
Sorteringsalgoritmer | |
---|---|
Teori | Kompleksitet O notation Ordreforhold Sorter typer bæredygtige Indre Ekstern |
Udveksling | |
Valg | |
indsætter | |
fusion | |
Ingen sammenligninger | |
hybrid | |
Andet | |
upraktisk |