SORTARE PRIN SELECȚIE
Ideea algoritmului este urmatoarea: tabloul unidimensional (vectorul) este împărţit în două părţi imaginare – o parte sortată şi o parte nesortată. La început, partea sortată este goală, în timp ce partea nesortată conţine întreg tabloul. La fiecare pas, algoritmul găseşte elementul minim din partea nesortată şi îl adaugă la finalul părţii sortate. Când partea nesortată rămâne goală, algoritmul se opreşte.
Când algoritmul sortează un tablou unidimensional, interschimbă primul element al părţii nesortate cu elementul minim şi după aceea el este inclus în partea sortată. Această implementare a sortării prin selecţie nu este stabilă. În cazul când sortăm o listă, şi, în loc de interschimbări, elementul minim este legat de partea nesortată, sortarea prin selecţie este stabilă.
Exemplu
Dorim să sortăm şirul {5, 1, 9, -2, 14, 2, 9,} utilizând sortarea prin selecţie.
Pașii în execuția algoritmului sunt:
5, 1, 9, -2, 14, 2, 9; nesortat
5, 1, 9, -2, 14, 2, 9; interschimbăm 5 cu -2
-2, 1, 9, 5, 14, 2, 9; 1 rămâne pe poziţie
-2, 1, 9, 5, 14, 2, 9; interschimbăm 2 cu 9
-2, 1, 2, 5, 14, 9, 9; 5 ramâne pe poziţie
-2, 1, 2, 5, 14, 9, 9; interschimbăm 14 cu 9
-2, 1, 2, 5, 9, 9 14; vector sortat
Algoritm descris în pseudocod
pentru i ← 0,n-1 execută
min ← i ;
pentru j ← i+1,n execută
dacă v[j]<v[i] atunci
min ← j ;
sfdacă
sfpentru
dacă min ≠ i atunci
aux ← v[i] ;
v[i] ← v[min] ;
v[min] ← aux ;
sfdacă
sfpentru
Implementare C++
void sortareSelecţie(int v[], int n)
{
int i, j, min, aux;
for (i = 0; i < n - 1; i++)
{
min = i;
for (j = i + 1; j < n; j++)
if (v[j] < v[min])
min = j;
if (min != i)
{
aux = v[i];
v[i] = v[min];
v[min] = aux;
}
}
}