Sortarea rapidă ( QuickSort) Descriere
-
Upload
warren-wynn -
Category
Documents
-
view
79 -
download
7
description
Transcript of Sortarea rapidă ( QuickSort) Descriere
![Page 1: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/1.jpg)
Sortarea rapidă (QuickSort)
DescriereMetoda 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ă.
![Page 2: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/2.jpg)
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ă.
![Page 3: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/3.jpg)
Nesortat
281 10 167 3 10 213
![Page 4: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/4.jpg)
Valoarea pivot =10; i=1; j=9.
281 10 167 3 10 213
![Page 5: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/5.jpg)
13>=10>=2 interschimbăm 13 cu 2 creşte i, scade j
281 10 167 3 10 213
![Page 6: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/6.jpg)
28>=10>=10 interschimbam 28 cu 10; creşte i, scade j
281 10 167 3 10 132
![Page 7: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/7.jpg)
10>=10>=3 interschimbăm 10 cu 3; creşte i scade j
101 10 167 3 28 132
![Page 8: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/8.jpg)
i>j se opreşte partiţionarea
101 3 167 10 28 132
![Page 9: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/9.jpg)
se aplică din nou algoritmul pentru (1, 2, 7, 10, 3 ) şi 1(6, 10, 28, 13)
101 3 167 10 28 132
![Page 10: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/10.jpg)
Pivot=7; i=1, j=5
101 3 167 10 28 132
![Page 11: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/11.jpg)
1<7 creşte i
101 3 167 10 28 132
![Page 12: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/12.jpg)
2<7 creşte i
101 3 167 10 28 132
![Page 13: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/13.jpg)
7>3 interschimbam 7 cu 3
creşte i scade j
101 3 167 10 28 132
![Page 14: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/14.jpg)
10>7 interschimbăm 10 cu 7 creşte i scade j; i>j - stop
101 7 163 10 28 132
![Page 15: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/15.jpg)
Se aplică algoritmul pentru partea dreaptă Pivot=10
71 10 163 10 28 132
Parte sortată
![Page 16: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/16.jpg)
16>=10>=13 interschimbăm 16 cu 13 creşte i scade j
71 10 163 10 28 132
![Page 17: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/17.jpg)
10>=10 se interschimbă 10 cu 10 creşte i scade j i>j se continuă partiţionarea
71 10 133 10 28 162
![Page 18: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/18.jpg)
Se aplica algoritmul pentru (13 10 ) şi (28 16)
71 10 133 10 28 162
![Page 19: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/19.jpg)
13>=10 se interschimbă 13 cu 10
71 10 133 10 28 162
![Page 20: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/20.jpg)
28>=16 se interschimbă 28 cu 16
71 10 103 13 28 162
![Page 21: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/21.jpg)
71 10 103 13 16 282
Vector sortat
![Page 22: Sortarea rapidă ( QuickSort) Descriere](https://reader036.fdocuments.net/reader036/viewer/2022081417/568136b8550346895d9e5b71/html5/thumbnails/22.jpg)
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 atunciaux←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);