Lecție pentru bacalaureat · Informatică

Interclasarea a doi vectori sortați

Clasa a X-a

Ideile de bază pe scurt și, unde există, exercițiile din subiectele de BAC care le verifică. Lecția completă, animată, cu grile și exerciții corectate, e în aplicația Tomomi.

Pe scurt

Formulă

Șablon: bucla de comparare

Doi indici, un singur avans per pas:

int i = 0, j = 0, k = 0;
while (i < n && j < m) {
    if (a[i] <= b[j]) {
        c[k] = a[i];
        i++;
    } else {
        c[k] = b[j];
        j++;
    }
    k++;
}
Idee

Idee: de ce ajunge o singură trecere

Fiecare vector fiind deja sortat, cel mai mic element necopiat este obligatoriu unul dintre cei doi candidați a[i] și b[j]. Nu trebuie să cauți minimul în tot vectorul, deci fiecare element este vizitat o singură dată. Condiția esențială este ca vectorii de intrare să fie SORTAȚI.

Formulă

Șablon: cele două bucle de rest

Se scriu amândouă; se execută cel mult una:

while (i < n) {
    c[k] = a[i];
    i++;
    k++;
}
while (j < m) {
    c[k] = b[j];
    j++;
    k++;
}
Sfat

Capcana: bucla de rest uitată

Prima buclă se oprește la epuizarea PRIMULUI vector (condiția are &&), deci în celălalt rămân aproape mereu elemente. Dacă omiți una dintre buclele de rest, programul trece de testele în care restul a rămas în vectorul pe care îl copiezi și pică exact pe celelalte - o eroare care se ascunde bine.

Formulă

Șablon: reuniunea (fără duplicate)

Trei ramuri; la egalitate scrii o valoare și avansezi ambii indici:

if (a[i] < b[j]) {
    c[k] = a[i]; i++; k++;
} else if (b[j] < a[i]) {
    c[k] = b[j]; j++; k++;
} else {
    c[k] = a[i]; i++; j++; k++;
}
Sfat

Capcana: câte elemente are rezultatul

Interclasarea clasică dă exact n + m elemente și păstrează duplicatele. Reuniunea dă n + m minus numărul valorilor comune. Dacă la egalitate avansezi un singur indice, valoarea comună este comparată din nou și ajunge de două ori în rezultat.

Toate lecțiile de Informatică

Descarcă

Începe azi. Bacul nu așteaptă.

Descarcă Tomomi pe telefonul copilului tău și pornește perioada de probă gratuită.