Sunteți pe pagina 1din 35

SORTAREA PRIN METODA BULELOR

s s

s
s s

OBIECTIVE: cunoasc semnificaia noiunii de sortare; descrie algoritmul n limbaj natural; cunoasc ce variabile sunt necesare; implementeze algoritmul n limbaj C++; rezolve probleme ce necesit sortri.

SEMNIFICAIA NOIUNII DE SORTARE


A sorta un elementele acestea s (cresctoare tablou nseamn a rearanja tabloului astfel nct ntre existe o relaie de ordine sau descresctoare)

DESCRIEREA METODEI
Prin aceast metod se parcurge tabloul i se compar fiecare element cu succesorul su. Dac nu sunt n ordine, cele dou elemente se interschimb ntre ele. Tabloul se parcurge de mai multe ori, pn cnd, la o parcurgere complet, nu se mai execut nicio interschimbare ntre elemente (adic tabloul este sortat).

ENUNUL PROBLEMEI:
Se d un tablou a cu n elemente ntregi. S se realizeze sortarea cresctoare a elementelor tabloului.

VARIABILE NECESARE
a tabloul unidimensional; n lungimea tabloului; aux pentru interschimbul elementelor (de acelai tip cu elementele tabloului); i contor (utilizat pentru parcurgerea tabloului); f variabil logic (se utilizeaz pentru a ti dac s-a fcut cel puin o operaie de interschimbare la parcurgerea tabloului).

ALGORITMUL N LIMBAJ NATURAL


1.

2.
3.

Se iniializeaz variabila f cu 1 (adic se presupune c irul este sortat); Se ncepe parcurgerea tabloului plecnd de la i=0 (primul element al tabloului); Se compar elementul a[i] cu elementul urmtor a[i+1]:

4.
5. 6. 7.

Se trece la urmtoarea poziie n tablou prin incrementarea lui i; Se continua parcurgerea tabloului fcnd comparaiile necesare pn cnd i ajunge la valoarea n-2; Se reia algoritmul ncepnd cu pasul 1 ct timp f=0, Cnd f rmne 1 atunci nseamn c tabloul este sortat cresctor (la ultima parcurgere nu s-a realizat nici un interchimb de elemente).

Dac a[i] > a[i+1] atunci se realizeaz interschimbul celor dou elemente i variabila f primete valoarea 0;

Fie tabloul unidimensional a ce are urmtorul coninut:


Poziia i = 0 1 2 3

n=4

f=1
i=0

Prima parcurgere a tabloului

>

DA
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR

f=0

Prima parcurgere a tabloului

f=0
i=1

Prima parcurgere a tabloului

>

DA
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR

f=0

Prima parcurgere a tabloului

f=0
i=2

Prima parcurgere a tabloului

> DA
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR

f=0

Prima parcurgere a tabloului

f=0

Prima parcurgere a tabloului

f=0 DA

SE REIA PARCURGEREA TABLOULUI

f=1
i=0

A doua parcurgere a tabloului

>

DA
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR

f=0

A doua parcurgere a tabloului

f=0
i=1

A doua parcurgere a tabloului

>

DA
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR

f=0

A doua parcurgere a tabloului

f=0
i=2

A doua parcurgere a tabloului

>

NU

f=0

A doua parcurgere a tabloului

f=0 DA

SE REIA PARCURGEREA TABLOULUI

f=1
i=0

A treia parcurgere a tabloului

>
DA
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR

f=0

A treia parcurgere a tabloului

f=0
i=1

A treia parcurgere a tabloului

> NU

f=0
i=2

A treia parcurgere a tabloului

> NU

f=0

A treia parcurgere a tabloului

f=0 DA

SE REIA PARCURGEREA TABLOULUI

f=1
i=0

A patra parcurgere a tabloului

> NU

f=1
i=1

A patra parcurgere a tabloului

>

NU

f=1
i=2

A patra parcurgere a tabloului

>

NU

f=1

A patra parcurgere a tabloului

f=0 NU

TABLOUL ESTE SORTAT

Tabloul iniial:

Tabloul sortat cresctor

ALGORITMUL N LIMBAJ C++


#include<iostream.h> int a[20],aux,f; unsigned int n,i; void main (void) { cout<<"n="; cin>>n; for (i=0;i<n;i++) { cout<<"a["<<i+1<<"]="; cin>>a[i]; } do
{ f=1; for(i=0;i<n-1;i++) if (a[i]>a[i+1]) { aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;

} while(!f); cout<<"sirul sortat este"<<endl; for (i=0;i<n;i++) cout<<a[i]<<" "; }

f=0; }

APLICAII
1.

Dndu-se un tablou cu n elemente numere naturale, i o variabil p natural (p<n), s se sorteze cresctor tabloul pn la elementul p i de la elementul p descresctor.

APLICAII
2.

Dndu-se un tablou cu n elemente numere naturale, s se localizeze elementul maxim i toate elementele dinaintea lui s se sorteze cresctor, iar cele de dup el,descresctor.

APLICAII
3.

Se introduce anul naterii pentru un numr de n persoane, n introdus i el de la tastatur. S se afieze vrstele persoanelor n ordine cresctoare.

TEM
Pentru un experiment privind inteligena unor maimue se aeaz pe mas un numr de maxim 20 de cuburi. Maimuele sunt nvate s aleag cuburile astfel nct s formeze din toate un turn stabil. Pentru fiecare maimu, nainte de testare, este nevoie s se rearanjeze cuburile n ordinea iniial. S se alctuiasc algoritmul dup care o maimu ar trebui s formeze turnul, astfel nct s se poat reface aezarea iniial a cuburilor.