Sunteți pe pagina 1din 4

Sortarea tablourilor unidimensionale

Sortarea unui tablou reprezintă o rearanjare a elementelor astfel încât valorile acestora să fie
într-o anumită ordine. De regulă ordinea cerută este cea crescătoare sau descrescătoare.

1. Sortarea prin selecție (Selection Sort)


Fie un vector x cu n elemente pe care dorim să-l sortăm crescător. Metoda se bazează pe
următoarea idee:

 plasăm în X[0] cea mai mică valoare din vector;


 plasăm în X[1] cea mai mică valoare rămasă;
 etc.

Algoritmul realizează sortarea prin selecția elementului minim la fiecare pas!

O descriere a algoritmului este:

 parcurgem vectorul cu indicele i


o parcurgem cu indicele j elementele din dreapta lui X[i]
 dacă elementele X[i] și X[j] nu sunt în ordinea dorită, le interschimbăm

Observații

 în algoritmul de mai sus, pentru fiecare valoare a lui i, în X[i] se obține cea mai mică
valoare dintre elementele cu indici i, i+1, ..., n; altfel spus, pentru fiecare i, în X[i] se
selectează minimul dintre elementele i, i+1, ..., n.
 dacă dorim sortare descrescătoare, alg. Terbuie modificat astfel încât să realizeze selecția
maximului
Varianta 1

for(int i = 0 ; i < n - 1 ; i++)


for(int j = i + 1 ; j < n ; j++) ///compară un elem. cu toate elem. din dreapta sa
if(X[i] > X[j]) ///interschimbă x[i] cu orice elem. mai mic decât el
{
int aux = X[i];
X[i] = X[j];
X[j] = aux;
}

Varianta 2

for(int i = 0 ; i < n - 1 ; i ++)


{
int p = i;
for(int j = i + 1 ; j < n ; j ++)
if(X[j] < X[p])
p = j; ///det. poziția elem. minim dintre elem. x[i+1] … x[n-1]
int aux = X[i]; ///apoi face interschimb între x[i] și minimul găsit
X[i] = X[p];
X[p] = aux;
}

Sursa: https://www.pbinfo.ro/articole/5605/sortarea-prin-selectie

Aici aveți și o simulare: https://www.youtube.com/watch?v=Ns4TPTC8whw


2. Sortarea prin metoda bulelor (Bubble Sort)

Fie un vector x cu n elemente pe care dorim să-l sortăm crescător. Metoda se bazează pe
următoarea idee:

 parcurgem vectorul și interschimbăm toate perechile de elemente vecine care nu sunt în


ordinea dorită
 după o singură parcurgere, vectorul nu va fi probabil sortat complet, dar putem repeta
parcurgerea
 Repetarea parcurgerii va continua până când toate elementele vor fi ordonate.

O reprezentare a algoritmului este:

 Repetă
o presupunem că vectorul este sortat
o parcurgem vectorul
 dacă două elemente învecinate nu sunt în ordinea dorită
 le interschimbăm
 schimbăm presupunerea inițială
 Până când vectorul devine ordonat
do
{
ok = 1; ///pp. că vectorul este sortat
for(int i = 0 ; i < n - 1 ; i ++)
if(v[i] > v[i+1]) ///se identifică o pereche neordonată
{
int aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;
ok = 0; ///vectorul nu e sortat încă
}
}
while(ok==0); ///se repetă parcurgerea cât timp vectorul nu e ordonat

Sursa: https://www.pbinfo.ro/articole/5589/metoda-bulelor
Aici aveți și o simulare: https://www.youtube.com/watch?v=lyZQPjUT5B4

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