Didaxis
lecție · Informatică

Sortarea prin inserție

Introducerea elementului în prefixul ordonat.

Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 3 · rezumatul lecției

Pe scurt

Sortarea prin inserție păstrează un prefix sortat și introduce următoarea valoare în locul potrivit din acel prefix. Din , introducem 2 înainte de 5 și obținem ; apoi introducem 4 între 2 și 5, rezultând .

Desen la lecția „Sortarea prin inserție”
2în detaliustratul 2 din 3 · pentru clasă și Bacalaureat

În detaliu

Sortarea prin inserție păstrează în stânga un prefix sortat, inițial formată din primul element. La pasul se ia elementul x = v[i], se deplasează cu o poziție spre dreapta elementele din prefix care sunt mai mari decât x, iar x se scrie în locul rămas liber. După pasul , prefixul de lungime este sortat. Numărul de deplasări este egal cu numărul inversiunilor șirului. Pe un tablou deja sortat se face câte o singură comparație pe pas, deci în total și nicio deplasare; pe un tablou sortat invers se fac deplasări. Comparația strictă > oprește deplasarea la un element egal cu x, deci elementele egale își păstrează ordinea: metoda este stabilă. Memoria auxiliară este constantă.

Exemplul 1 — tabloul .

#include <iostream>
using namespace std;
int main() {
    int v[] = {5, 2, 4, 1, 3}, n = 5;
    for (int i = 1; i < n; ++i) {
        int x = v[i], j = i - 1;
        while (j >= 0 && v[j] > x) {
            v[j + 1] = v[j];
            --j;
        }
        v[j + 1] = x;
        for (int y : v) cout << y << ' ';
        cout << '\n';
    }
    return 0;
}

După fiecare pas tabloul este: 2 5 4 1 3 (2 intră înaintea lui 5), 2 4 5 1 3 (4 intră între 2 și 5), 1 2 4 5 3 (1 trece peste trei elemente și ajunge la început), 1 2 3 4 5 (3 trece peste 5 și 4). Deplasările sunt , egale cu numărul inversiunilor. Prefixul sortat crește cu un element la fiecare pas.

Exemplul 2 — cazurile extreme. Pentru (deja sortat), condiția v[j] > x este falsă de la prima comparație, deci se fac 4 comparații și 0 deplasări. Pentru (sortat invers), fiecare element nou trece peste tot prefixul: deplasările sunt . Pentru deplasările sunt 4, numărul inversiunilor , , și . Pe date aproape sortate inserția este foarte rapidă, de aceea se folosește adesea pentru prelucrarea finală a unor tablouri parțial ordonate.

Exemplul 3 — inserția unei valori într-un tablou sortat. Pentru a păstra un tablou sortat după adăugarea unei valori se folosește chiar pasul de inserție: din se adaugă 5, se deplasează 9 și 7 spre dreapta, iar 5 intră pe poziția 2, rezultând . Aceeași idee permite menținerea unui tablou sortat pe măsură ce valorile sunt citite, fără o sortare separată la sfârșit.

Diferența se vede la dimensiuni mari. Pentru , un tablou deja sortat cere 999 de comparații, iar unul sortat invers cere de deplasări. Pentru aceeași dimensiune, un tablou „aproape sortat”, în care fiecare element este la cel mult o poziție de locul lui, cere cel mult câteva sute de deplasări.

Exemplul 4 — stabilitatea pe date cu două câmpuri. Elevii , , și se sortează crescător după notă. La , Dan intră înaintea Anei. La , Mara are nota 7 ca Ana și comparația strictă > este falsă, deci Mara rămâne după Ana. La , Ion trece peste Mara și peste Ana, dar se oprește după Dan, pentru că este fals. Rezultatul este Dan, Ion, Ana, Mara, cu trei deplasări: elevii cu aceeași notă și-au păstrat ordinea inițială.

3pentru admiterestratul 3 din 3 · pentru examene

Pentru admitere

Verifică ordinea condițiilor din j >= 0 && v[j] > x: evaluarea scurtcircuitată împiedică accesul la v[-1]. După deplasări, locul lui x este j + 1, nu j. Prefixul sortat crește cu un element la fiecare iterație. Dacă subiectul cere starea tabloului după pași, numără pașii exteriori (valorile lui i), nu deplasările. Pe un tablou cu elemente egale, comparația >= în loc de > ar deplasa și elementele egale, deci ar schimba ordinea lor.

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

int a[] = {2, 5, 4, 1, 3};
for (int i = 1; i < 3; i++) {
    int x = a[i], j = i - 1;
    while (j >= 0 && a[j] > x) {
        a[j + 1] = a[j];
        j--;
    }
    a[j + 1] = x;
}
for (int i = 0; i < 5; i++)
    cout << a[i] << ' ';
  • a) 1 2 3 4 5
  • b) 2 4 5 1 3
  • c) 2 5 4 1 3
  • d) 1 2 4 5 3

Răspunsul corect este b). Ciclul face doar doi pași. Pentru , nu este mai mic decât 2, deci rămâne pe loc. Pentru , este mai mic decât 5, deci 5 se deplasează la dreapta, iar 4 intră pe poziția 1: 2 4 5 1 3. Ultimele două elemente nu au fost încă prelucrate. Varianta d) este starea după trei pași, iar varianta a) după toți patru.

Numărarea deplasărilor. Pentru trei pași exteriori produc, pe rând, tablourile (o deplasare), (două deplasări) și (trei deplasări), în total . Pentru se fac trei deplasări: la valoarea 1 mută pe 3, la valoarea 2 mută tot pe 3, la valoarea 5 nu mută nimic, iar la valoarea 4 mută pe 5. Dacă ți se cere numărul de atribuiri a[j + 1] = a[j], numără doar deplasările, nu și scrierile finale a[j + 1] = x.

Greșeli frecvente

  • Greșit: după deplasări, valoarea x se scrie la v[j].
    Corect: se scrie la v[j + 1], locul rămas liber.
  • Greșit: inserția face mereu comparații.
    Corect: pe date sortate face doar .
  • Greșit: dacă ordinea condițiilor se inversează în v[j] > x && j >= 0, rezultatul este același.
    Corect: se poate accesa v[-1], în afara tabloului.
î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ă

Surse și referințe

Redactare proprie, conform programei:

  • 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

  • UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
  • Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42); rocnee.eu
  • Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE; 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; edu.ro

Desene: Redactare proprie (desen original)

lecțiile sunt gratuite

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