1 / 22

Sortarea rapidă ( QuickSort) Descriere

Sortarea rapidă ( QuickSort) Descriere Metoda Divide et Impera este utilizată în sortarea rapidă. Ideea algoritmului:

warren-wynn
Download Presentation

Sortarea rapidă ( QuickSort) Descriere

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sortarea rapidă (QuickSort) Descriere Metoda Divide et Impera este utilizată în sortarea rapidă. Ideea algoritmului: 1. Se alege o valoare pivot. Se ia valoarea elementului din mijloc ca valoare pivot, dar poate fi oricare altă valoare, care este în intervalul valorilor sortate, chiar dacă nu este prezentă în tablou. 2. Partiţionare.Se rearanjează elementele în aşa fel încât, toate elementele care sunt mai mari decât pivotul merg în partea dreaptă a tabloului. Valorile egale cu pivotul pot sta în orice parte a tabloului. În plus, tabloul poate fi împărţit în părţi care nu au aceeaşi dimensiune (nu sunt egale). 3. Se sortează amândouă părţile.se aplică recursiv algoritmul de sortare rapidă în partea stângă şi în partea dreaptă.

  2. Algoritmul de partiţie în detaliu. Există 2 indici i şi j, şi la începutul algoritmului de partiţionare i indică primul element al tabloului iar j indică ultimul element din tablou. La pasul următor algoritmul mută i înainte, pâna când un element cu o valoare mai mare sau egală cu pivotul este găsită. Indicele j este mutat înapoi, pâna când un element cu valoare mai mică sau egală cu pivotul este găsită. Dacă i<=j atunci i merge pe poziţia i+1 iar j merge pe poziţia j-1. Algoritmul se opreşte, când i > j Exemplu dorim să sortăm şirul {1, 13, 7, 28, 10, 16, 3, 10, 2} folosind sortarea rapidă.

  3. Nesortat 1 13 7 28 10 16 3 10 2

  4. Valoarea pivot =10; i=1; j=9. 1 13 7 28 10 16 3 10 2

  5. 13>=10>=2 interschimbăm 13 cu 2 creşte i, scade j 1 13 7 28 10 16 3 10 2

  6. 28>=10>=10 interschimbam 28 cu 10;creşte i, scade j 1 2 7 28 10 16 3 10 13

  7. 10>=10>=3 interschimbăm 10 cu 3; creşte i scade j 1 2 7 10 10 16 3 28 13

  8. i>j se opreşte partiţionarea 1 2 7 10 3 16 10 28 13

  9. se aplică din nou algoritmul pentru (1, 2, 7, 10, 3 ) şi 1(6, 10, 28, 13) 1 2 7 10 3 16 10 28 13

  10. Pivot=7; i=1, j=5 1 2 7 10 3 16 10 28 13

  11. 1<7 creşte i 1 2 7 10 3 16 10 28 13

  12. 2<7 creşte i 1 2 7 10 3 16 10 28 13

  13. 7>3 interschimbam 7 cu 3 creşte i scade j 1 2 7 10 3 16 10 28 13

  14. 10>7 interschimbăm 10 cu 7 creşte i scade j; i>j - stop 1 2 3 10 7 16 10 28 13

  15. Se aplică algoritmul pentru partea dreaptă Pivot=10 Parte sortată 1 2 3 7 10 16 10 28 13

  16. 16>=10>=13interschimbăm 16 cu 13 creşte i scade j 1 2 3 7 10 16 10 28 13

  17. 10>=10 se interschimbă10 cu 10 creşte i scade j i>j se continuă partiţionarea 1 2 3 7 10 13 10 28 16

  18. Se aplica algoritmul pentru (13 10 ) şi (28 16) 1 2 3 7 10 13 10 28 16

  19. 13>=10 se interschimbă 13 cu 10 1 2 3 7 10 13 10 28 16

  20. 28>=16 se interschimbă 28 cu 16 1 2 3 7 10 10 13 28 16

  21. Vector sortat 1 2 3 7 10 10 13 16 28

  22. Algoritm descris în pseudocod: quickSort(V,st,dr); pivot←v[(st+dr) div 2)]; cât timp i<=j execută cât timp v[i] <pivot execută i←i+1; dacă i<=j atunci aux←v[i]; v[i]←v[j]; v[j]←aux; i←i+1; j←j-1; dacă st<j atunci quikSort(v,st,j); dacă i<dr atunci quikSort(v,i,dr);

More Related