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.
Heapsort a fost propus de J. Williams în 1964. [unu]
Heapsort folosește un arbore de sortare binar . Un arbore de sortare este un arbore care îndeplinește următoarele condiții:
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
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 .
Algoritmul „sortare heap” este utilizat în mod activ în nucleul Linux .
Algoritmi de sortare | |
---|---|
Teorie | Complexitate O notație Relația de comandă Sortați tipuri durabil Intern Extern |
schimb valutar | |
Alegere | |
inserții | |
fuziune | |
Fara comparatii | |
hibrid | |
Alte | |
nepractic |