Pyramid sort

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 9 februari 2020; kontroller kräver 9 redigeringar .

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.

Skapande historia

Heapsort föreslogs av J. Williams 1964. [ett]

Algoritm

Heapsort använder ett binärt sorteringsträd . Ett sorteringsträd är ett träd som uppfyller följande villkor:

  1. Varje blad har ett djup på antingen , eller , vilket  är trädets maximala djup.
  2. Värdet vid någon vertex är inte mindre (det andra alternativet är inte mer än) värdet på dess avkomlingar.

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 och nackdelar

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 .

Applikation

Algoritmen "heap sort" används aktivt i Linux-kärnan .

Anteckningar

  1. 1 2 Föreläsningskurs "Modern teknologier för parallell programmering", Föreläsning nr 5: Heap sort (otillgänglig länk) . Hämtad 20 mars 2009. Arkiverad från originalet 15 mars 2009. 
  2. ScienceDirect - Journal of Algorithms: Analysen av Heapsort . Hämtad 30 september 2017. Arkiverad från originalet 4 juni 2012.

Litteratur

Länkar