Sunteți pe pagina 1din 3

SORTAREA PRIN METODA BULELOR

SEMNIFICAŢIA NOŢIUNII DE SORTARE

A sorta un tablou înseamnă a rearanja elementele tabloului astfel încât între acestea să
existe o relaţie de ordine (crescătoare sau descrescătoare)
DESCRIEREA METODEI

Prin această metodă se parcurge vectorul şi se compară fiecare element cu succesorul său.
Dacă nu sunt în ordine, cele două elemente se interschimbă între ele. Vectorul se parcurge
de mai multe ori, până când, la o parcurgere completă, nu se mai execută nicio
interschimbare între elemente (adică vectorul este sortat).
ENUNŢUL PROBLEMEI:

Se dă un tablou a cu n elemente întregi. Să se realizeze sortarea crescătoare a elementelor


tabloului.
VARIABILE NECESARE

a – tabloul unidimensional;
n – lungimea tabloului;
aux – pentru interschimbul elementelor (de acelaşi tip cu elementele tabloului);
i – contor (utilizat pentru parcurgerea tabloului);
f – variabilă logică (se utilizează pentru a şti dacă s-a făcut cel puţin o operaţie de
interschimbare la parcurgerea vectorului).
ALGORITMUL ÎN LIMBAJ NATURAL

 Se iniţializează variabila f cu 1 (adică se presupune că şirul este sortat);


 Se începe parcurgerea tabloului plecând de la i=0 (primul element al tabloului);
 Se compară elementul a[i] cu elementul următor a[i+1]:
 Dacă a[i] > a[i+1] atunci se realizează interschimbul celor două elemente
şi variabila f primeşte valoarea 0;
• Se trece la următoarea poziţie în tablou prin incrementarea lui i;
• Se continua parcurgerea tabloului făcând comparaţiile necesare până când i
ajunge la valoarea n-2;
• Se verifică valoarea variabilei f:
• Dacă f=0 atunci se reia parcurgerea tabloului începând de la prima poziţie
(i=0);
• Dacă f=1 atunci înseamnă că tabloul este sortat crescător (la ultima
parcurgere nu s-a realizat nici un interschimb de elemente).
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]<<" ";
}
APLICAŢII
1. Dându-se un tablou cu n elemente numere naturale, şi o variabilă p naturală (p<n),
să se sorteze crescător tabloul până la elementul p şi de la elementul p
descrescător.
Parte declarativă corectă – 1 p
Citire tablou – 1 p
Sortare crescătoare – 2 p
Sortare descrescătoare – 2 p
Afişare tablou – 1 p
Din oficiu – 3 p
2. Dându-se un tablou cu n elemente numere naturale, să se localizeze elementul
maxim şi toate elementele dinaintea lui să se sorteze crescător, iar cele de după
el,descrescător.
Parte declarativă corectă – 1 p
Citire tablou – 1 p
Determinare element maxim – 1 p
Sortare descrescătoare – 1,5 p
Sortare crescătoare – 1,5 p
Afişare tablou – 1 p
Din oficiu – 3 p

3. Se introduce anul naşterii pentru un număr de n persoane, n introdus şi el de la


tastatură. Să se afişeze vârstele persoanelor în ordine crescătoare.
Parte declarativă corectă – 1 p
Citire tablou – 1 p
Creare tablou cu vârstele – 2 p
Sortare crescătoare – 2 p
Afişare tablou – 1 p
Din oficiu – 3 p

LUCRU SUPLIMENTAR
Se dă un şir de numere întregi. Să se ordoneze şirul astfel încât primele poziţii să conţină
componentele pare ordonate crescător, iar apoi să conţină componentele impare ordonate
descrescător.
TEMĂ
Pentru un experiment privind inteligenţa unor maimuţe se aşează pe masă un număr de
maxim 20 de cuburi. Maimuţele sunt învăţate să aleagă cuburile astfel încât să formeze
din toate un turn stabil. Pentru fiecare maimuţă, înainte de testare, este nevoie să se
rearanjeze cuburile în ordinea iniţială. Să se alcătuiască algoritmul după care o maimuţă
ar trebui să formeze turnul, astfel încât să se poată reface aşezarea iniţială a cuburilor.

S-ar putea să vă placă și