Sunteți pe pagina 1din 2

Sortarea (ordonarea) șirurilor

A. Sortarea prin Metoda bulelor (Bubble sort)

Definiție: Numim sortarea unui șir dispunerea (aranjarea) elementelor șirului într-o anumită
ordine (de exemplu, crescătoare sau descrescătoare).

Algoritmul pentru sortarea unui șir prin Metoda bulelor este următorul:
Metoda bulelor constă în compararea fiecărui element al șirului cu succesorul său. În cazul în
care cele două elemente comparate nu sunt în ordinea potrivită, ele se interschimbă.
Șirul de numere se parcurge de mai multe ori, până când nu mai este nicio interschimbare
între elemente.
Pentru a vedea dacă au fost interschimbări între elemente la o parcurgere, se definește o
variabilă eSortat, care primește valoarea 0 (Fals), dacă există interschimbări, și 1 (Adevărat),
dacă nu este nicio interschimbare, caz în care șirul este ordonat corespunzător.

Problemă: Se dă un șir de n elemente numere naturale, unde 1 ≤ n ≤ 100. Să se ordoneze


crescător acest șir.

Exemplu: Intrare: n=6 5 3 1 6 Ieșire: 1 3 5 6


Indicații: Vom ordona acest șir utilizând metoda de sortare, Metoda bulelor (Bubble sort).

Programul C++ este:


Descoperiți
#include <iostream>
using namespace std;
int main()
{ int n, i, eSortat, m, int v[100];
cout<<"n="; cin>>n; //se introduce numărul de elemente
for (i=0; i<=n-1; i++) cin>>v[i]; //se introduc elementele șirului
do //se parcurge șirul cat timp încă nu este sortat
{ eSortat=1; //pornim cu presupunerea ca șirul este sortat
for (i=0; i<=n-2; i++)

prof. Boca Dana-Emilia Pagină 1


{ if(v[i]>v[i+1]) //daca 2 elemente succesive nu sunt in ordinea buna
{ m=v[i]; v[i]=v[i+1]; v[i+1]=m; //atunci ele se interschimba
eSortat=0; } }} //a fost facuta o inversiune, deci sirul nu era sortat
while (eSortat==0);
for(i=0; i<=n-1; i++) cout<<v[i]<<" "; //se afiseaza sirul sortat
return 0;
}

B. Sortarea prin selecție

Algoritmul pentru sortarea unui șir prin metoda selecției este următorul:
Metoda selecției constă în compararea fiecărui element al șirului cu toate elementele de
după el.
În cazul în care cele două elemente comparate nu sunt în ordinea potrivită, ele se
interschimbă. După efectuarea tuturor comparațiilor, șirul va fi sortat.

Problemă: Copiii unei școli au început să economisească bani din bursa lor. Știind că sunt n copii,
unde 1 ≤ n ≤ 100, ordonați crescător sumele strânse de ei la un moment dat.

Observație:
După ce elementul de pe o poziție i
este comparat cu toate cele de după
el (pozițiile j), pe poziția i va fi
plasat cel mai mic dintre elementele
comparate.

Programul C++ este:

#include <iostream>
using namespace std;
int main()
{ int n, i, j, m, v[100];
cout<<"n="; cin>>n; //se introduce numărul de elemente
for(i=0; i<=n-1; i++) cin>>v[i]; //se introduc elementele șirului
for (i=0; i<=n-2; i++) //elementul i se compara
for (j=i+1; j<=n-1; j++) //elementul j cu care se compara elementul i
if(v[i]>v[j]) //daca elementele nu sunt in ordinea buna
{ m=v[i]; v[i]=v[j]; v[j]=m; } //atunci ele se interschimba
for(i=0; i<=n-1; i++) cout<<v[i]<<" "; //se afișează șirul sortat
return 0;
}

prof. Boca Dana-Emilia Pagină 2

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