Heap sort ( eng. Heapsort , "Heap sort" [1] ) är en sorteringsalgoritm som fungerar i sämsta fall, i genomsnitt och i bästa fall (det vill säga garanterat) för operationer vid sortering av element. [2] Mängden använt back-end-minne beror inte på storleken på arrayen (det vill säga ).
Kan ses som en förbättring av bubble sort , där ett element flyter ( min-heap ) / sjunker ( max-heap ) över många banor.
Heapsort föreslogs av J. Williams 1964. [ett]
Heapsort använder ett binärt sorteringsträd . Ett sorteringsträd är ett träd som uppfyller följande villkor:
En bekväm datastruktur för ett sorteringsträd är en array Arraysom Array[0] är elementet vid roten och elementets barn Array[i]är Array[2i+1]och Array[2i+2].
Sorteringsalgoritmen kommer att bestå av två huvudsteg:
1. Bygg elementen i arrayen i form av ett sorteringsträd :
kl .
Detta steg kräver operation.
2. Vi tar bort element från roten ett i taget och bygger om trädet. Det vill säga, i det första steget byter vi Array[0]och Array[n-1]omvandlar Array[0], Array[1], ... , Array[n-2]till ett sorteringsträd. Sedan arrangerar vi om Array[0]och Array[n-2], transformerar Array[0], Array[1], … , Array[n-3]till ett sorteringsträd. Processen fortsätter tills det bara finns ett element kvar i sorteringsträdet. Sedan Array[0], Array[1], … , Array[n-1] är en ordnad sekvens.
Detta steg kräver operation.
Fördelar
Brister
O ( n ) minneskrävande sammanslagningssortering är snabbare ( med en mindre konstant) och försämras inte på dålig data.
På grund av algoritmens komplexitet erhålls förstärkningen endast för stora n . På litet n (upp till flera tusen) är Shellsort snabbare .
Algoritmen "heap sort" används aktivt i Linux-kärnan .
Sorteringsalgoritmer | |
---|---|
Teori | Komplexitet O notation Orderförhållande Sorteringstyper hållbar Inre Extern |
Utbyta | |
Val | |
Insatser | |
fusion | |
Inga jämförelser | |
hybrid | |
Övrig | |
opraktisk |