Pyramide sortering

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 9. februar 2020; checks kræver 9 redigeringer .

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.

Oprettelseshistorie

Heapsort blev foreslået af J. Williams i 1964. [en]

Algoritme

Heapsort bruger et binært sorteringstræ . Et sorteringstræ er et træ, der opfylder følgende betingelser:

  1. Hvert blad har en dybde på enten , eller , som  er træets maksimale dybde.
  2. Værdien ved ethvert toppunkt er ikke mindre (den anden mulighed er ikke mere end) værdien af ​​dens efterkommere.

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 og ulemper

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 .

Ansøgning

Algoritmen "heap sort" bruges aktivt i Linux-kernen .

Noter

  1. 1 2 Forelæsningsforløb "Moderne teknologier til parallel programmering", Foredrag nr. 5: Heap sort (utilgængeligt link) . Hentet 20. marts 2009. Arkiveret fra originalen 15. marts 2009. 
  2. ScienceDirect - Journal of Algorithms: The Analysis of Heapsort . Hentet 30. september 2017. Arkiveret fra originalen 4. juni 2012.

Litteratur

Links