Sunteți pe pagina 1din 35

SORTAREA PRIN METODA

BULELOR
OBIECTIVE:
s cunoasc semnificaia noiunii de sortare;
s descrie algoritmul n limbaj natural;
s cunoasc ce variabile sunt necesare;
s implementeze algoritmul n limbaj C++;
s rezolve probleme ce necesit sortri.
SEMNIFICAIA NOIUNII DE
SORTARE
A sorta un tablou nseamn a rearanja
elementele tabloului astfel nct ntre
acestea s existe o relaie de ordine
(cresctoare 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. Se iniializeaz variabila f cu 1 (adic se presupune c irul este
sortat);
2. Se ncepe parcurgerea tabloului plecnd de la i=0 (primul element
al tabloului);
3. Se compar elementul a[i] cu elementul urmtor a[i+1]:
Dac a[i] > a[i+1] atunci se realizeaz interschimbul celor dou
elemente i variabila f primete valoarea 0;
4. Se trece la urmtoarea poziie n tablou prin incrementarea lui i;
5. Se continua parcurgerea tabloului fcnd comparaiile necesare
pn cnd i ajunge la valoarea n-2;
6. Se reia algoritmul ncepnd cu pasul 1 ct timp f=0,
7. Cnd f rmne 1 atunci nseamn c tabloul este sortat cresctor
(la ultima parcurgere nu s-a realizat nici un interchimb de
elemente).
Fie tabloul unidimensional a ce are
urmtorul coninut:
4 1 2 3
1 0 3 2 Poziia i =
n=4
4 1 2 3
f=1
i=0
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR
Prima parcurgere a tabloului
>
DA
4 1 2 3

f=0
Prima parcurgere a tabloului
4 1 2 3
f=0
i=1
Prima parcurgere a tabloului
>
DA
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR
4 1 2 3


Prima parcurgere a tabloului

f=0
4 1 2 3


f=0
i=2
Prima parcurgere a tabloului
>
DA
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR
4 1 2 3


Prima parcurgere a tabloului

f=0
4 1 2 3


f=0

Prima parcurgere a tabloului
f=0
DA
?
SE REIA PARCURGEREA TABLOULUI
4 1 2 3


A doua parcurgere a tabloului f=1
i=0
>
DA
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR
4 1 2 3


A doua parcurgere a tabloului

f=0
4 1 2 3


A doua parcurgere a tabloului f=0
i=1
>
DA
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR
4 1 2 3


A doua parcurgere a tabloului

f=0
4 1 2 3


A doua parcurgere a tabloului
f=0
i=2
>
NU
4 1 2 3


A doua parcurgere a tabloului
f=0
f=0 ?
DA
SE REIA PARCURGEREA TABLOULUI
4 1 2 3


A treia parcurgere a tabloului f=1
i=0
>
DA
SE REALIZEAZ INTERSCHIMBUL ELEMENTELOR
4 1 2 3


A treia parcurgere a tabloului

f=0
4 1 2 3


A treia parcurgere a tabloului


f=0
i=1
>
NU
4 1 2 3


A treia parcurgere a tabloului


f=0
i=2
>
NU
4 1 2 3


A treia parcurgere a tabloului


f=0
f=0 ?
DA
SE REIA PARCURGEREA TABLOULUI
4 1 2 3


A patra parcurgere a tabloului


f=1
i=0
>
NU
4 1 2 3


A patra parcurgere a tabloului


f=1
i=1
>
NU
4 1 2 3


A patra parcurgere a tabloului


f=1
i=2
>
NU
4 1 2 3


A patra parcurgere a tabloului


f=1
f=0 ?
NU
TABLOUL ESTE SORTAT
4 1 2 3


Tabloul sortat cresctor

4 1 2 3
Tabloul iniial:
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;
f=0;
}
}
while(!f);
cout<<"sirul sortat este"<<endl;
for (i=0;i<n;i++)
cout<<a[i]<<" ";
}

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.