Sunteți pe pagina 1din 2

Metoda bulelor (bubble-sort)

Algoritmul const n parcurgerea tabloului A de mai multe ori, pn cnd devine ordonat. La
fiecare pas se compar dou elemente alturate. Dac ai > ai + 1, (i = 1, 2, ..., n 1), atunci cele
dou valori se interschimb ntre ele. Controlul aciunii repetitive este dat de variabila boolean
ok, care la fiecare reluare a algoritmului primete valoarea iniial adevrat, care se schimb n
fals dac s-a efectuat o interschimbare de dou elemente alturate. n momentul n care
tabloul A s-a parcurs fr s se mai efectueze nici o schimbare, ok rmne cu valoarea iniial
adevrat i algoritmul se termin, deoarece tabloul este ordonat.
Interschimbarea a dou elemente se realizeaz prin intermediul variabilei auxiliare aux care are
acelai tip ca i elementele tabloului.
Subalgoritm Metoda_bulelor (A)
1: repeta
2: ok = adevrat
3: pentru i=1,n-1 execut
4:
dac a[i] > a[i+1] atunci
5:
ok = fals
6:
aux = a[i]
7:
a[i] = a[i+1]
8:
a[i+1] = aux
9: pana cand ok
Considerm tabloul A cu 5 elemente numere reale: 0.0, 1.1, 1.0, 1.2 i 0.08. Prima parcurgere a
tabloului (ok este iniializat cu adevrat):
a1 = 0.0 a2 = 1.1 a3 = 1.0 a4 = 1.2 a5 = 0.08 ok
0.0
1.0 1.1
1.2
0.08
fals
0.0
1.0
1.1
0.08 1.2
fals
Valorile 0.0 < 1.1, rmn neschimbate, 1.1 > 1.0, le interschimbm. Deoarece 1.1 < 1.2,
avansm i constatm c 1.2 > 0.0.8, deci din nou avem interschimbare. n consecin, la ieire
din structura pentru ok este fals. Observm c 1.2 a ajuns pe locul lui definitiv. Urmeaz a doua
parcurgere a tabloului (ok primete din nou valoarea adevrat).
a1 = 0.0 a2 = 1.0 a3 = 1.1 a4 = 0.08 a5 = 1.2 ok
0.0
1.0
0.08 1.1
1.2
fals
Am avut interschimbare i de data aceasta, deci ieim cu ok = fals. La acest pas 1.1 a ajuns pe
locul su definitiv. A treia parcurgere a tabloului ncepe cu reiniializarea lui ok cu valoarea
adevrat.
a1 = 0.0 a2 = 1.0 a3 = 0.08 a4 = 1.1 a5 = 1.2 ok
0.0
0.08 1.0
1.1
1.2
fals
Am interschimbat 0.08 cu 1.0, cel din urm astfel a ajuns pe locul su n irul ordonat. A patra
parcurgere a tabloului se finalizeaz cu valoarea ok = adevrat, deoarece nu am efectuat nici o
interschimbare, ceea ce nseamn c procesul de ordonare s -a ncheiat.
a1 = 0.0 a2 = 0.08 a3 = 1.0 a4 = 1.1 a5 = 1.2 ok
0.0
0.08
1.0
1.1
1.2
adevrat
Observaia cu privire la faptul c la fiecare parcurgere a ajuns cel puin un element pe locul su
definitiv n irul ordonat poate fi fructificat, deoarece constatm c 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. Astfel,


ajungem la urmtorul subalgoritm mbuntit ca performan:
Subalgoritm Metoda_bulelor (A)
1: k=n {k va fi limita superioara pana unde se interschimba elemente}
2: repeta
3: ok = adevrat
4: pentru i=1,k-1 execut
5:
dac a[i] > a[i+1] atunci
6:
ok = fals
7:
aux = a[i]
8:
a[i] = a[i+1]
9:
a[i+1] = aux
10:
j=i
11: k=j; {ultimul indice pentru care s-a facut interchimbare}
12: pana cand ok
Metoda bulelor nu este cea mai performant modalitate de a ordona un ir cu multe elemente,
dar n cazul irurilor aproape ordonate, cu optimizrile de mai sus, poate deveni mai eficient
dect alte metode.
Pentru a analiza timpul de execuie al metodei bulelor trebuie s lum n considerare 3 mrimi:
1. numrul de treceri (parcurgeri)
2. numrul de interschimbri
3. numrul de comparaii
Dac presupunem c valorile de intrare reprezint o permutare a mulimii {1, 2, ..., n} putem
uor descrie efectul fiecrei treceri astfel: dac un element ai nu are nici un precedent mai
mare el va rmne pe loc, iar daca are cel puin unul mai mare atunci el se va muta cu o poziie
mai n fa. Reamintesc c elementul maxim de la fiecare parcurgere va ajunge pe poziia final.
Astfel, eficiena metodei bulelor depinde de numrul de inversiuni din permutarea iniial (fa
de permutarea final, cea identic). Voi defini n continuare inversiunea i proprietile
inversiunilor.
Definiie: Fie a1, a2, ... an o permutare a mulimii {1, 2, ..., n}. Dac i<j i ai>aj, atunci perechea
(ai, aj) se numete inversiunii a permutrii. De exemplu, n permutarea 3,1,4,2 se gsesc 3
inversiuni: (3,1), (3,2) i (4,2).
Observaie: Singura permutare fr inversiuni este cea ordonat (identic) 1,2,...,n.
Cazul cel mai favorabil este acela n care datele iniiale sunt ordonate cresctor, caz n care se
face o singur parcurgerea a datelor.
Cazul cel mai nefavorabil este cel n care datele sunt sortate descresctor, caz n care se vor
face n-1 parcurgeri. La prima parcurgere se vor face n-1 interschimbri, la a doua n-2 i aa mai
departe. Aadar numrul de comparaii i cel de interschimbri va fi n(n-1)/2. Exemplu n acest
caz:
a1
a2
a3
a4
Numrul de interschimbri
Numrul parcurgerii
iniial
4
3
2
1
1
3
2
1
4
3
2
2
1
3
4
2
3
1
2
3
4
1
Total interschimbri
6
Astfel, vom spune c metoda bulelor are un timp de execuie n cazul cel mai defavorabil de
(n2).