Didaxis
lecție · Informatică

Noțiunea de sortare

A sorta un șir de valori înseamnă a le rearanja în ordine crescătoare sau descrescătoare. Programa de Bacalaureat cere metoda bulelor, sortarea prin selecție, prin inserție și prin numărare; în clasa a XI-a se adaugă sortarea rapidă și sortarea prin interclasare. Metodele diferă prin numărul de comparații și de mutări și prin memoria suplimentară folosită.

Se face în:
Clasa a IX-a
Clasa a X-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 3 · rezumatul lecției

Pe scurt

Sortarea rearanjează elementele după o relație de ordine, de obicei crescător sau descrescător. Din obținem crescător. Numărul de elemente și valorile, inclusiv repetițiile, se păstrează; se schimbă doar ordinea. Lecțiile „Sortarea prin selecție”, „Sortarea prin metoda bulelor”, „Sortarea prin inserție”, „Sortarea prin numărare”, „Sortarea rapidă” și „Sortarea prin interclasare” arată metode diferite.

Metoda Ideea Comparații, în cel mai rău caz Stabilă
Metoda bulelor compari vecinii și îi interschimbi dacă nu sunt în ordine da
Selecția minimului aduci, pe rând, minimul din partea nesortată pe prima ei poziție , în orice caz nu, în forma cu interschimbare
Inserția inserezi fiecare element la locul lui în partea deja sortată da
Numărarea numeri de câte ori apare fiecare valoare, apoi le scrii în ordine fără comparații; pași, cu valoarea maximă da, în forma care mută elementele
Sortarea rapidă (quicksort) împarți vectorul în jurul unui pivot și sortezi cele două părți ; în medie de ordinul nu
Sortarea prin interclasare sortezi cele două jumătăți, apoi le interclasezi de ordinul da

În Python, sorted([5,2,4]) produce lista nouă [2,4,5]. La studierea unui algoritm de sortare urmărești și pașii intermediari, nu numai rezultatul.

Desen la lecția „Noțiunea de sortare”
2în detaliustratul 2 din 3 · pentru clasă și Bacalaureat

În detaliu

Sortarea rearanjează o colecție după o cheie și o ordine, păstrând inclusiv repetițiile. O sortare corectă respectă ordinea cerută și nu pierde elemente. Metodele diferă prin comparații, mutări, memorie suplimentară și comportamentul pe date deja ordonate. O metodă stabilă păstrează ordinea relativă a elementelor cu aceeași cheie, utilă când acestea au și alte câmpuri.

Metoda bulelor

Metoda bulelor interschimbă vecinii dezordonați; după prima trecere, maximul ajunge la final. O variabilă pentru interschimbări permite oprirea când vectorul este sortat. Trecerile pas cu pas, numărul de interschimbări și sortarea după un criteriu sunt în lecția despre bubble sort.

Sortarea prin selecție

Pentru fiecare poziție i, de la prima la penultima, cauți minimul dintre elementele de la i până la final și îl interschimbi cu elementul de pe poziția i. Numărul de comparații este mereu același, dar interschimbările sunt cel mult n − 1, ceea ce o face utilă când mutarea unui element costă mult. Exemplul de mai jos o aplică pas cu pas.

Sortarea prin inserție

Partea din stânga a vectorului este mereu sortată. Iei următorul element, muți spre dreapta elementele mai mari decât el și îl pui pe locul rămas liber, ca atunci când aranjezi cărțile de joc în mână. Pe un vector aproape sortat face foarte puține mutări.

Sortarea prin numărare

Când valorile sunt numere naturale mici (de exemplu, note sau cifre), folosești un vector de frecvență: f[v] reține de câte ori apare valoarea v. Apoi parcurgi valorile posibile în ordine și scrii fiecare valoare de câte ori a apărut. Metoda nu compară elemente între ele, dar are nevoie de un vector cât valoarea maximă.

Sortarea rapidă și sortarea prin interclasare

Ambele sunt aplicații ale metodei divide et impera, din clasa a XI-a. Sortarea rapidă alege un pivot, așază la stânga lui valorile mai mici și la dreapta pe cele mai mari, apoi sortează cele două părți; detaliile sunt în lecția despre quicksort. Sortarea prin interclasare împarte vectorul în două jumătăți, le sortează și le unește într-un singur vector ordonat. Interclasarea a doi vectori deja sortați apare și singură în programa de Bacalaureat.

Un fragment care nu este algoritm de sortare

O metodă simplă compară și schimbă două elemente aflate în ordine greșită:

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int v[] = {5, 2, 4};
    if (v[0] > v[1]) swap(v[0], v[1]);
    if (v[1] > v[2]) swap(v[1], v[2]);
    for (int x : v) cout << x << ' ';
    return 0;
}

Programul afișează 2 4 5, dar nu este un algoritm de sortare: pentru ar da , adică un șir nesortat. O sortare corectă garantează ordinea pentru toate intrările permise, nu doar pentru un exemplu.

Exemplul 2 — compararea metodelor pe același tablou. Pentru , sortarea prin selecție face 10 comparații și 3 schimburi, metoda bulelor face 10 comparații și 7 schimburi, iar sortarea prin inserție face 7 deplasări de elemente. Numărul de schimburi ale metodei bulelor și numărul de deplasări ale inserției sunt egale cu numărul de inversiuni ale șirului, adică al perechilor aflate în ordine greșită: , , , , , și , în total 7. Pe un tablou deja sortat inserția face doar comparații și nicio deplasare, pe când selecția face tot comparații.

Alegerea unei metode depinde de datele problemei. Pentru tablouri mici și simple se folosește una dintre metodele cu pași; pentru tablouri mari se preferă metodele rapide (sortarea rapidă și sortarea prin interclasare, cu pași), iar pentru valori întregi dintr-un interval mic, sortarea prin numărare, cu pași.

Exemplul 3 — stabilitatea. Elementele , , se ordonează crescător după valoare. O metodă stabilă dă , adică cele două elemente egale rămân în ordinea inițială. Sortarea prin selecție cu schimb simplu poate da pentru șirul : minimul 3 este schimbat cu primul element, iar ajunge după . În Python, sorted și list.sort sunt stabile.

elevi = [(7, "Ana"), (9, "Bia"), (7, "Cora")]
print(sorted(elevi, key=lambda e: e[0]))

Programul afișează [(7, 'Ana'), (7, 'Cora'), (9, 'Bia')]: Ana rămâne înaintea Corei, deși au aceeași notă.

Exemplul 4 — sortarea prin numărare. Pentru șirul , cu valori întregi între 0 și 3, se numără de câte ori apare fiecare valoare: vectorul de frecvențe este , pentru valorile 0, 1, 2 și 3. Apoi fiecare valoare se scrie de atâtea ori cât arată frecvența ei: 0 o dată, 1 de două ori, 2 niciodată, 3 de două ori. Rezultatul este . Metoda nu compară elementele între ele și face aproximativ pași, dar are sens numai dacă domeniul valorilor este mic.

Exemple rezolvate

Exemplul 1: sortarea prin selecție, pas cu pas

Sortează crescător vectorul 7, 3, 9, 1, 5 prin selecția minimului și afișează vectorul după fiecare pas.

  1. Pasul 1: minimul dintre toate cele cinci valori este 1, pe poziția a patra; îl interschimbi cu 7: 1, 3, 9, 7, 5.
  2. Pasul 2: minimul dintre 3, 9, 7, 5 este 3, deja pe locul lui: vectorul nu se schimbă.
  3. Pasul 3: minimul dintre 9, 7, 5 este 5; îl interschimbi cu 9: 1, 3, 5, 7, 9.
  4. Pasul 4: minimul dintre 7 și 9 este 7, deja pe locul lui.
#include <iostream>
using namespace std;

int main() {
    int v[] = {7, 3, 9, 1, 5}, n = 5;
    for (int i = 0; i < n - 1; i++) {
        int pmin = i;                       // pozitia minimului din v[i..n-1]
        for (int j = i + 1; j < n; j++)
            if (v[j] < v[pmin])
                pmin = j;
        int aux = v[i]; v[i] = v[pmin]; v[pmin] = aux;
        for (int k = 0; k < n; k++)
            cout << v[k] << " ";
        cout << "\n";
    }
    return 0;
}

Programul afișează:

1 3 9 7 5
1 3 9 7 5
1 3 5 7 9
1 3 5 7 9

Pentru n = 5 elemente, selecția face 4 + 3 + 2 + 1 = 10 comparații, adică , oricum ar fi așezate valorile la început.

3pentru admiterestratul 3 din 3 · pentru examene

Pentru admitere

La un item de examen, stabilește cheia, sensul ordonării și metoda cerută. Dacă enunțul dă pașii sortării prin selecție, inserție sau interschimbare, urmărește exact acei pași; rezultatul final singur nu răspunde la o întrebare despre o etapă intermediară. De exemplu, pentru , ordonarea crescătoare dă , dar după prima trecere a sortării prin selecție primul element este minimul 1 schimbat cu , deci șirul este , iar după prima trecere a metodei bulelor este . Selecția face comparații indiferent de ordinea inițială, iar inserția pe un tablou deja sortat face comparații. Dacă elementele cu aceeași cheie trebuie să își păstreze ordinea relativă, folosește o metodă stabilă.

Exemplu în formatul examenului. Ce se afișează în urma executării secvenței de mai jos?

int c = 0;
for (int i = 0; i < 5; i++)
    for (int j = i + 1; j < 6; j++)
        c++;
cout << c;
  • a) 5
  • b) 6
  • c) 15
  • d) 30

Răspunsul corect este c). Ciclurile parcurg toate perechile de poziții cu dintr-un tablou cu 6 elemente: pentru sunt 5 valori ale lui , pentru sunt 4, apoi 3, 2 și 1. Suma este . Este exact numărul de comparații al sortării prin selecție pentru . Varianta d) numără toate perechile ordonate, iar varianta a) numără numai primul ciclu exterior.

La metoda bulelor, după prima trecere cel mai mare element ajunge pe ultima poziție: din se obține , iar după treceri ultimele elemente sunt deja la locul lor.

Unde apare la examen

  • Bacalaureatul, informatică, matematică-informatică: la „Algoritmi elementari”, programa de examen numește metodele de ordonare (metoda bulelor, a inserției, a selecției și a numărării), interclasarea, metodele de căutare și analiza complexității unui algoritm; sortarea rapidă și sortarea prin interclasare nu sunt numite (programa de examen, anexa 2 la OMECTS 4800/2010). În programa școlară veche de clasa a XI-a, ele apar ca exemple de aplicații ale metodei divide et impera (programa de clasa a XI-a).

Greșeli frecvente

  • Greșit: două comparații și schimburi pot sorta orice tablou cu trei elemente.
    Corect: un algoritm de sortare trebuie să funcționeze pentru toate intrările permise.
  • Greșit: sortarea poate șterge elementele repetate.
    Corect: păstrează toate elementele, inclusiv repetițiile; se schimbă doar ordinea.
  • Greșit: toate metodele de sortare fac același număr de comparații.
    Corect: selecția face mereu , iar inserția poate face doar pe date sortate.
  • Greșit: sortarea crescătoare a lui este .
    Corect: aceasta este descrescătoare.
în contul tăuPremium

Testează-te pe această lecție

Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.

Înainte și după

Întrebări frecvente

Care este cea mai simplă metodă de sortare?
Metoda bulelor și sortarea prin selecție sunt cele mai ușor de scris: două structuri repetitive și o interschimbare. Amândouă fac, în cel mai rău caz, de ordinul n² comparații, deci sunt potrivite pentru vectori mici.
Ce înseamnă că o metodă de sortare este stabilă?
Elementele egale după criteriul de sortare rămân în ordinea în care erau la început. Contează când sortezi după un criteriu și vrei să păstrezi o ordine anterioară, de exemplu elevii sortați după medie, dar păstrați în ordine alfabetică la medii egale.
Care metodă de sortare este cea mai rapidă?
Depinde de date. Pentru valori naturale mici, sortarea prin numărare face un număr de pași proporțional cu numărul de valori plus valoarea maximă. Pentru valori oarecare, sortarea prin interclasare face de ordinul n log n operații, iar sortarea rapidă la fel, în medie.

Surse și referințe

Redactare proprie, conform programei:

  • OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633 și 1653–1654; OMEC 4370/2026, anexa 8, p. 155–156; rocnee.eu
  • OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
  • OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633; rocnee.eu
  • OMEC 6930/2025, anexa 66, Informatică IX CS militar, Monitorul Oficial nr. 4 bis/8.01.2026, pp. 2563–2578; cdn.edupedu.ro; centralizator oficial actualizat prin OMEC 3224/2026, legislatie.just.ro
  • OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1653–1654; rocnee.eu
  • OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; plan de încadrare: OMECI 3410/2009, anexa 1, p. PDF 1–14; forum.isj.hd.edu.ro; filiera tehnologică: OMECI 3412/2009, anexa 2, tabel X, legislatie.just.ro
  • OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; rocnee.eu
  • UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro

Documente consultate

  • Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42), p. 1632–1633 și 1653–1654; rocnee.eu
  • Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE, p. 4–5, clasa X; rocnee.eu
  • Programa școlară de informatică, clasa a XI-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
  • Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3–4; p. 3 și 6; edu.ro
  • UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121)
  • aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10)
  • OMEC 4370/2026, anexa 8, p. 155–156

Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42); rocnee.eu

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.