Didaxis
lecție · Informatică

Interclasarea

Unirea a două șiruri deja ordonate.

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

Pe scurt

Interclasarea unește două șiruri deja sortate într-un singur șir sortat. Pentru și , comparăm valorile curente și alegem mereu cea mai mică: 1, 2, 4, 4, 7, 8. Duplicatele se păstrează. Dacă unul dintre șiruri se termină, copiem restul celuilalt.

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

În detaliu

Interclasarea unește două șiruri deja sortate într-un singur șir sortat, fără a ordona de la zero elementele. Se folosesc doi indici, pentru primul șir și pentru al doilea, ambii pornind de la început. La fiecare pas se compară elementele curente a[i] și b[j], se alege cel mai mic, se trece în rezultat și se avansează indicele șirului din care a fost luat. Când unul dintre șiruri se termină, restul celuilalt, care este deja sortat și mai mare decât tot ce a fost scris, se copiază fără comparații. Cele două bucle finale sunt necesare, pentru că bucla principală se oprește imediat ce unul dintre șiruri s-a epuizat. Fiecare element este preluat o singură dată, deci pentru șiruri de lungimi și se fac cel mult comparații, iar timpul este proporțional cu . Valorile egale se păstrează. Dacă la egalitate se preia elementul din primul șir (<=), interclasarea este stabilă. Interclasarea nu este același lucru cu concatenarea: după concatenarea șirurilor și se obține , care nu este sortat.

Exemplul 1 — șiruri de lungimi egale.

#include <iostream>
using namespace std;
int main() {
    int a[] = {1, 4, 7}, b[] = {2, 4, 8};
    int i = 0, j = 0;
    while (i < 3 && j < 3) {
        if (a[i] <= b[j]) cout << a[i++] << " ";
        else cout << b[j++] << " ";
    }
    while (i < 3) cout << a[i++] << " ";
    while (j < 3) cout << b[j++] << " ";
    return 0;
}

Se afișează 1 2 4 4 7 8. Pașii sunt: (se preia 1), (se preia 2), (se preia 4 din primul șir), (se preia 4 din al doilea), (se preia 7). Acum primul șir s-a epuizat și se copiază restul celui de-al doilea, 8. Condiția <= alege la egalitate elementul din primul șir.

Exemplul 2 — șiruri de lungimi diferite. Pentru și , bucla principală face 3 comparații: (se preia 1), (se preia 2), (se preia 3). Primul șir s-a epuizat, iar bucla pentru restul celui de-al doilea copiază 4, 6 și 8. Rezultatul este 1 2 3 4 6 8. Numărul de comparații, 3, este mai mic decât , pentru că restul lui a fost copiat fără comparații.

Exemplul 3 — reuniunea fără duplicate. Din șirurile și se poate obține reuniunea mulțimilor lor, adică elementele distincte din ambele. Se interclasează în același fel, dar un element se scrie numai dacă este diferit de ultimul scris: după 1, 2, 4, valoarea 4 din al doilea șir este omisă, apoi urmează 7 și 8. Rezultatul este , cu 5 elemente. Condiția de omitere este x != ultim, unde ultim este ultimul element scris.

Exemplul 4 — egalitate și stabilitate. Fie și . Notăm cu indicele „A” sau „B” originea fiecărui 5. Pașii: (se preia 3), (se preia primul 5 din ), (se preia al doilea 5 din ). Acum este epuizat și se copiază restul lui : 5 și 6. Rezultatul este : cu <=, elementele egale din primul șir apar înaintea celor din al doilea. S-au făcut 3 comparații, mai puține decât .

3pentru admiterestratul 3 din 3 · pentru examene

Pentru admitere

Nu confunda interclasarea cu concatenarea. La urmărire, marchează separat indicii i și j și notează elementele comparate. Cele două bucle finale sunt necesare: dacă lipsesc, elementele rămase într-unul dintre șiruri nu apar în rezultat. Dacă fragmentul din subiect conține doar bucla principală, rezultatul este incomplet și trebuie citit exact așa. Compară și semnul din test: cu < în loc de <= la egalitate se preia elementul din al doilea șir, deci stabilitatea se schimbă.

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

int a[] = {1, 5, 9}, b[] = {2, 3, 10};
int i = 0, j = 0;
while (i < 3 && j < 3) {
    if (a[i] <= b[j]) cout << a[i++] << ' ';
    else cout << b[j++] << ' ';
}
  • a) 1 2 3 5 9 10
  • b) 1 2 3 5 9
  • c) 1 2 3 5 10
  • d) 1 2 3 9 10

Răspunsul corect este b). Se compară și se afișează 1, apoi și se afișează 2, apoi și se afișează 3, apoi și se afișează 5, apoi și se afișează 9. În acest moment , primul șir s-a epuizat, bucla se oprește, iar valoarea 10 din al doilea șir nu a mai fost afișată, pentru că secvența nu are buclele de copiere finale. Varianta a) este rezultatul interclasării complete.

Al doilea exemplu: numărul de comparații. Fie și , interclasate cu bucla principală de mai sus, care testează a[i] <= b[j]. Elementele se preiau alternativ: 1 din , 2 din , 3, 4, 5, 6 și 7. Abia după preluarea lui 7 se epuizează , deci s-au făcut 7 comparații, adică . La șirurile și se fac doar 4 comparații, pentru că primul șir se epuizează înaintea oricărui element al celui de-al doilea.

Greșeli frecvente

  • Greșit: interclasarea este concatenarea celor două șiruri.
    Corect: ea produce un șir sortat, comparând valorile curente.
  • Greșit: bucla principală copiază singură toate elementele.
    Corect: după terminarea unuia dintre șiruri, restul celuilalt trebuie copiat separat.
  • Greșit: interclasarea cere ca șirurile să aibă aceeași lungime.
    Corect: lungimile pot fi diferite; trebuie doar ca ambele șiruri să fie sortate.
î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:

  • 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

  • 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.