Sortare piramidală

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 9 februarie 2020; verificările necesită 9 modificări .

Heap sort ( ing.  Heapsort , „Heap sort” [1] ) este un algoritm de sortare care funcționează în cel mai rău, în medie și în cel mai bun caz (adică garantat) pentru operațiunile de sortare a elementelor. [2] Cantitatea de memorie back-end utilizată nu depinde de dimensiunea matricei (adică, ).

Poate fi considerată o îmbunătățire a sortării cu bule , în care un element plutește ( min-heap ) / se scufundă ( max-heap ) pe mai multe căi.

Istoricul creației

Heapsort a fost propus de J. Williams în 1964. [unu]

Algoritm

Heapsort folosește un arbore de sortare binar . Un arbore de sortare este un arbore care îndeplinește următoarele condiții:

  1. Fiecare frunză are o adâncime de , sau , care  este adâncimea maximă a copacului.
  2. Valoarea la orice vârf nu este mai mică (cealaltă opțiune nu este mai mare decât) valoarea descendenților săi.

O structură de date convenabilă pentru un arbore de sortare este o matrice Arrayastfel încât să Array[0] fie elementul de la rădăcină, iar copiii elementului Array[i]sunt Array[2i+1]și Array[2i+2].

Algoritmul de sortare va consta din doi pași principali:

1. Construiți elementele matricei sub forma unui arbore de sortare :

la .

Acest pas necesită intervenție chirurgicală.

2. Vom elimina elementele din rădăcină pe rând și vom reconstrui arborele. Adică, la primul pas, schimbăm Array[0]și Array[n-1], transformăm Array[0], Array[1], … , Array[n-2]într-un arbore de sortare. Apoi rearanjam Array[0]și Array[n-2], transformăm Array[0], Array[1], ... , Array[n-3]într-un arbore de sortare. Procesul continuă până când rămâne un singur element în arborele de sortare. Atunci Array[0], Array[1], … , Array[n-1] este o secvență ordonată.

Acest pas necesită intervenție chirurgicală.

Avantaje și dezavantaje

Avantaje

Defecte

O ( n ) sortare de îmbinare consumatoare de memorie este mai rapidă ( cu o constantă mai mică) și nu se degradează pe datele proaste.

Datorită complexității algoritmului, câștigul se obține numai pentru n mare . Pe n mic (până la câteva mii), Shellsort este mai rapid .

Aplicație

Algoritmul „sortare heap” este utilizat în mod activ în nucleul Linux .

Note

  1. 1 2 Curs de prelegeri „Tehnologii moderne de programare paralelă”, Lectura nr. 5: Sortare heap (link inaccesibil) . Consultat la 20 martie 2009. Arhivat din original pe 15 martie 2009. 
  2. ^ ScienceDirect - Journal of Algorithms: The Analysis of Heapsort . Consultat la 30 septembrie 2017. Arhivat din original pe 4 iunie 2012.

Literatură

Link -uri