Cum le diferențiezi?
Cele trei sortări ajung la același rezultat, dar mecanismul este diferit:
| Algoritm | Ideea principală |
|---|
| Bubble Sort | compară elemente vecine și le interschimbă |
| Selection Sort | caută minimul și îl aduce pe poziția curentă |
| Insertion Sort | introduce fiecare element în partea deja sortată |
Imaginează-le astfel:
BUBBLE
5 2 4 1
↔ ↔ ↔
compar vecinii
SELECTION
5 2 4 1
↑
caut minimul
↓
îl aduc în față
INSERTION
2 4 5 | 3
↑
îl inserez
în partea deja sortată
Sortarea descrescătoare
Nu avem nevoie de alți algoritmi.
Schimbăm sensul comparațiilor.
De exemplu, la Bubble Sort, pentru ordine crescătoare avem:
if (v[j] > v[j + 1])
Pentru ordine descrescătoare:
if (v[j] < v[j + 1])
Aceeași idee se aplică și celorlalte sortări: în loc să construim ordinea de la mic la mare, o construim de la mare la mic.
Cum gândești singur algoritmul?
Nu încerca să memorezi trei blocuri mari de cod fără să știi ce fac.
Memorează mai întâi ideea fiecărei sortări:
Bubble
→ compar vecinii
Selection
→ caut minimul
Insertion
→ inserez în partea sortată
Dacă înțelegi mecanismul, codul devine mult mai ușor de reconstruit.
Recapitulare
BUBBLE SORT
vecini → compar → schimb
SELECTION SORT
poziție → caut minimul → schimb
INSERTION SORT
element → deplasez valorile mai mari → inserez
Toate transformă:
5 2 4 1
în:
1 2 4 5
dar folosesc trei strategii diferite.
Ideea esențială: nu memora codurile ca pe trei formule. Înțelege ce face fiecare algoritm la un pas, apoi repetarea acelui pas produce vectorul sortat.