Documente Academic
Documente Profesional
Documente Cultură
Exemplu
Trecerea 1
Trecerea 2
Trecerea 3
Trecerea 4
Trecerea 5
Trecerea 6
Considerm un vector v cu 10 elemente: 128, 77, 907, 407, 372, 478, 553, 348, 237, 878.
Figura 1 prezentat mai jos arat aciunea metodei asupra celor 10 elemente ale vectorului v1, v2
,...,v10. Elementele vectorului sunt reprezentate pe vertical, nu pe orizontal, cu v10 n vrf i v1 la
baz.
Dup fiecare trecere prin date, se observ c toate elementele de deasupra ultimei care a fost
interschimbat, precum i aceasta din urm, se afl pe poziiile lor finale, deci nu mai trebuie examinate
la urmtoarele treceri.
Liniile orizontale din figura 1 arat desfurarea operaiei de sortare din acest punct de vedere.
Se observ c n urma trecerii 3, cinci elemente au ajuns n poziia corect. La ultima trecere prin date
nu se mai efectueaz nici un interschimb.
878
907
907
907
907
907
907
907
237
878
878
878
878
878
878
878
348
237
553
553
553
553
553
553
553
348
237
478
478
478
478
478
478
553
348
237
407
407
407
407
372
478
478
348
237
372
472
472
407
372
407
407
348
237
348
348
907
407
372
372
372
348
237
237
77
128
128
128
128
128
128
128
128
77
77
77
77
77
77
77
Metoda este numit sortare cu bule pentru c elementele mari se ridic la suprafa pn n
poziia lor corect, ca nite bule n ap. Sortarea cu bule mai este cunoscut i sub denumirea selectare
prin interschimbare sau propagare.
COMPLEXITATEA ALGORITMULUI
n cazul cel mai favorabil, atunci cnd elementele vectorului sunt aranjate n ordinea cresctoare
a valorilor se parcurge vectorul o singur dat i se execut n-1 comparaii.
n cazul cel mai defavorabil, atunci cnd elementele vectorului sunt aranjate n ordinea
descresctoare a valorilor se execut
n n 1
2
87
8
23
7
34
8
55
3
47
8
37
2
40
7
90
7
77
12
8
90
7
87
8
23
7
34
8
55
3
47
8
37
2
40
7
12
8
77
90
7
87
8
55
3
23
7
34
8
47
8
40
7
37
2
12
8
77
90
7
87
8
55
3
47
8
23
7
34
8
40
7
37
2
12
8
77
90
7
87
8
55
3
47
8
40
7
23
7
34
8
37
2
12
8
77
90
7
87
8
55
3
47
8
40
7
37
2
23
7
34
8
12
8
77
Trecerea
Trecerea
Trecerea
Trecerea
Trecerea
Trecerea
Exemplu
Vom considera acelai vector v cu 10 elemente: 128, 77, 907, 407, 372, 478, 553, 348, 237,
878. Figura 2 prezentat mai jos arat aciunea metodei bulelor mbuntit asupra celor 10 elemente
ale vectorului v1, v2 ,...,v10. Linia neagr orizontal reprezint poziia superioar a unei treceri prin
elementele vectorului. Elementele aflate deasupra acestei linii nu vor mai fi parcurse deoarece acestea
sunt pe poziiile lor finale.
90
7
87
8
55
3
47
8
40
7
47
2
34
8
23
7
12
8
77
90
7
87
8
55
3
47
8
40
7
47
2
34
8
23
7
12
8
77
Se observ c la fiecare parcurgere cel puin un element a ajuns pe locul su definitiv n irul
ordonat, astfel, la urmtorul pas nu mai sunt necesare verificrile n care intervine acest element i cele
care se afl dup el n ir. Rezult c la fiecare parcurgere am putea micora cu 1 numrul elementelor
verificate. Dar este posibil ca la o parcurgere s ajung mai multe elemente n locul lor definitiv.
Rezult c vom ine minte indicele ultimului element care a intervenit n interschimbare i verificrile
le vom efectua doar pn la acest element. Similar, se poate restrnge i indicele primului element care
a intervenit n interschimbri. Se va limita regiunea analizat cu cel puin o poziie att la dreapta ct i
la stnga la fiecare parcurgere a irului.
Aceast variant este cunoscut sub numele de sortarea shaker (shaker sort).
Subalgoritm Bule_shaker (n, K)
st 1
dr n
repeta
t 0
pentru i=st, dr-1 execut
dac v[i] > v[i+l]
atunci
interschimb (v[i],v[i+1])
t i
sfrit dac
sfrit pentru
dac t0 atunci
drt
t0
pentru i=dr, st+1,-1 execut
dac v[i] < v[i-1] atunci
interschimb(v[i],v[i-1])
t i
sfrit dac
sfrit pentru
st < t
sfrit dac
pn cnd t=0 or s=d
sfrit subalgoritm
Trecerea 5
Trecerea 4
Trecerea 3
Trecerea 2
Trecerea 1
Exemplu
Vom considera acelai date ca n exemplele anterioare, i anume vectorul v cu cele 10 elemente:
128, 77, 907, 407, 372, 478, 553, 348, 237, 878. Figura 3 prezentat mai jos arat aciunea metodei
bulelor shaker asupra celor 10 elemente ale vectorului v1, v2 ,...,v10.
Se observ c vectorul este parcurs de la stnga spre dreapta reinndu-se poziia ultimei
interschimbri ntr-o variabil care va reprezenta poziia superioar, pn unde se va face urmtoarea
parcurgere. Apoi, se va face o parcurgere de la dreapta spre reinndu-se ntr-o variabil poziia ultimei
interschimbri care reprezint poziia inferioar, din care va porni urmtoarea parcurgere. Elementele
aflate deasupra poziiei superioare sau sub poziia inferioar nu vor mai fi parcurse la urmtoarea
trecere deoarece acestea sunt pe poziiile lor finale.
Deci, vectorul se parcurge n ambele sensuri, ducnd spre capetele cele mai mari, respectiv cele
mai mici, elemente. K. E. Inverson a fcut urmtoarea observaie interesant: dac j este un indice
astfel nct vj i vj+1 nu sunt interschimbate n dou treceri consecutive, n direcii opuse, atunci vj i vj+1
se gsesc n poziiile lor finale i nu este necesar s intre n nici una din comparaiile care urmeaz.
878
907
907
907
907
907
907
237
878
878
878
878
878
878
348
237
348
553
553
553
553
553
348
553
348
478
478
478
478
553
478
478
407
407
407
372
478
372
407
372
372
372
407
372
407
3722
348
237
237
907
407
237
237
237
348
348
77
128
128
128
128
128
128
128
77
77
77
77
77
77
Analiza sortrii prin metoda bulelor a condus la concluzia c nu este o metod foarte bun.
Comparnd aceast metod cu inseria direct se ajunge la concluzia c timpul necesar sortrii cu
metoda bulelor este dublu, iar programul este mult mai complicat.
S-a ncercat mbuntirea acestuia. Una din metodele gsite a fost ''sortarea shaker n care
trecerile alternate merg n direcii opuse. Numrul mediu de comparaii fiind uor redus. i cu aceast
mbuntire algoritmul nu se mbuntete n aa fel nct s devin mai eficient dect inseria direct.