Sunteți pe pagina 1din 5

Algoritmul HeapSort. Structuri si algoritmi de prelucrarea datelor.

Algoritmul HeapSort. Este un algoritm, care a primit denumirea de aranjarea piramidala (HeapSort). Ideea sa, consta din: in loc de completare aborele se formeaza un sir a[1], a[2],,a[n] aranjat in piramida , aranjarea consta ca fiecare a[i] sa indeplineasca conditia a[i]<=a[2i]si a[i]<=a[2i+1]. Apoi piramida se foloseste pentru aranjare. Cea mai clara metoda de constructi a piramidei,se uita la aranjarea sirul intr-un arbore, prezentat in fig.2.9. Sirul este reprezentat ca arbore binar a carui virf corespunde cu elimentul sirului a[1]. La nivelul doi se gasesc elementele a[2]si a[3]. La nivelul trei a[4],a[5], a[6] a[7] si asa mai departe. Se observa ca petru un sir cu un numar impar de elemente, arborele va fi echilibrat, dar pentr-un un sir cu un numar par de elimente, n elimente a[n] va fi in partea stinga a foii asemanator cu un arbore

a1=8 a2=23 a4=65 a8=6


Fig2.9 n mod evident,la construirea piramidei suntem interesati de elementele a[n / 2], a[n/2-1], ..., a[1] pentru sirurii cu un numr par de elemente, i elementele a[(n-1) 2], a[(n-1) / 2-1], ...,a[1] pentru sirurii cu un numr impar de elemente (ca numai aceste sunt elemente eseniale pentru a

a3=5 a6=33

a5=44

a7=1
Pasul

limita piramida). Fie i cel mai mare indice, printre indicii de elemente care sunt limitri importante ale piramidei. Apoi se ia elementul a[i] din arborele,apoi urmeaza procedura de screening(depistare), care const n faptul c ramura a arborelui este selectata corespunzator, min (a[2i], a[2i+1]), precum i valoarea a[i] este schimbata cu valoarea elementului corespunztor. Dac acest element nu este o ramura arborelui, pentru el se face aceiasi procedur etc. Aceste aciuni sunt realizate succesiv pentru a [i], a [i-1], ..., a [1]. Este uor de observat c rezultatul este o vizualizare arborescent a piramidei pentru sirul original (succesiune de etape utilizate n exemplele de sir este prezentat n figurile 2.10 - 2.13).

a1=8 a2=23 a4=6 a8=65


Pasul
Fig. 2.10.

a3=5 a6=33

a5=44

a7=1

a1=8 a2=23 a4=6 a5=44 a3=1 a6=33 a7=5

a8=65
Fig. 2.11

Pasul

a1=8 a2=6 a4=23 a8=65


Fig. 2.12.

a3=1 a6=33

a5=44

a7=5

Pasul

a1=1 a2=6 a3=8 a6=33 a7=5

a4=23
a8=65

a5=44

Pasul
Fig. 2.13.

n 1964, Floyd a propus o metoda de a construi o piramida, fr construirea explicit a arborelui (dei metoda se bazeaz pe aceleai idei.)Construirea de piramide de Floyd pentru sirul noastru standard, se arat n tabelul
abelul 2.7 Exemplu de construiere a piramidei

Starea initiala a sirului


Pasul 1 Pasul 2 Pasul 3 Pasul 4

8 23 5 |65| 44 33 1 6 8 23 |5| 6 44 33 1 65 8 |23| 1 6 44 33 5 65 |8| 6 1 23 44 33 5 65 1 6 8 23 44 33 5 65 1 6 5 23 44 33 8 65

Tabelul 2.8 arat cum s sortai utiliznd piramide construite.Esena algoritmului este `1urmatoarea. Fie i - cel mai mare indice a sirului, pentru care sunt semnificativ condiiile de piramida. Apoi, incepind cu a[1]pina la a[i],se efectuiaza urmtoarele aciuni. La fiecare pas, se alege ultimul element al piramidei (n cazul nostru, primul element este selectat a[8]). Se schimba cu locul cu a[1], apoi pentru a[1]se utilizeaza de screening(depistarea). La fiecare pas, numrul de elemente din piramida este redus cu 1 (dup prima etap a piramidei sunt considerate ca elemente ale a[1], a[2], ..., a [n-1], dup a dou a[1] a[2], ..., a [n-2], i aa mai departe, pn

cnd piramida ramine doar un element). Este uor de vazut acest lucru (ilustrat n Tabelul 2.8), care rezultatul va fi un sir aranjat n ordine descresctoare. Avei posibilitatea s modificai metoda de construcie a piramidelor i sortarea pentru a obine comenzi n ordine cresctoare, dac modificai starea unei piramide pe a[i]> = a[2i] si a[1]> = a[2i+1] pentru toate valorile semnificative a indicelui i..
belul 2.8 Sortarea cu ajutorul piramidei Piramida initiala 1 6 5 23 44 33 8 65 65 6 5 23 44 33 8 1 Pasul 1 5 6 65 23 44 33 8 1 5 6 8 23 44 33 65 1 65 6 8 23 44 33 5 1 Pasul 2 6 65 8 23 44 33 5 1 6 23 8 65 44 33 5 1 33 23 8 65 44 6 5 1 Pasul 3 8 23 33 65 44 6 5 1 44 23 33 65 8 6 5 1 Pasul 4 23 44 33 65 8 6 5 1 65 44 33 23 8 6 5 1 Pasul 5 33 44 65 23 8 6 5 1 65 44 33 23 8 6 5 1 Pasul 6 44 65 33 23 8 6 5 1 Pasul 7 65 44 33 23 8 6 5 1

Algoritmul sortari utilizand o piramida necesita ndeplinirea ordinea de trepte nxlog n (log binar) n cel mai rau caz, ceea ce l face deosebit de atractiv pentru sortarea tablouri mari.