Sunteți pe pagina 1din 2

Interclasarea a doi vectori

Fiind dați doi vectori sortați, prin interclasarea lor se înțelege construirea unui al treilea
vector sortat care să conțină toate elementele acestora. Printre cele mai importante aplicații
ale interclasării se numără reuniunea și intersecția a două mulțimi, dar mai ales sortarea prin
interclasare.

În continuare, vom considera că vrem să interclasăm vectorii a, de lungime m, și b,


de lungime n, formând un vector c, de lungime p(=m+n).
Exemplu
a=⟨1,4,5,5,7,9⟩

b=⟨2,3,5,6,7⟩

c=⟨1,2,3,4,5,5,5,6,7,7,9⟩

Soluții naive
Printre primele soluții care ne vin în minte se regăsesc:
a) Copiem tot vectorul a în c, iar apoi luăm pe rând elementele lui b, și le
inserăm pe pozițiile lor corespunzătoare în c. Mai precis, parcurgem de la
dreapta la stânga vectorul c, cât timp elementele sale sunt mai mici decât
elementul curent din b, timp în care le mutăm cu o poziție la dreapta, pentru
a-i face loc elementului nou.
b)  Concatenăm cei doi vectori în c (introducem în c elementele lui a, iar în
continuare elementele lui b), și apoi sortăm vectorul c
Totuși, soluțiile de mai sus nu prea se folosesc de faptul că vectorii a și b sunt deja
sortați.

Algoritmul de interclasare este:

1. Declaram un vector c, care este inițial fără nici un element (k = 0), k reprezintă
numărul de elemente din vectorul c (la început în vectorul c nu avem nici un
element). Inițializăm variabilele i (cu care parcurg vectorul a) și j (cu care parcurg
vectorul b) cu 1 pentru că plecăm de pe pria poziție în ambii vectori

2. Cât timp se află elemente în ambii vectori (i <= n si j <= m):

a. Compară elementul a[i ] si b[j]

b. Incrementăm k

c. Adaugăm in c, pe pozitia k, elementul cel mai mic dintre a[i ] si b[j]

d. Incrementăm indicele corespunzător vectorului din care am făcut adăugarea


(incrementăm i dacă elementul a[i ] a fost mai mic, în caz contrar, incrementăm b[j].

3. Verificăm în care dintre cei doi vectori au mai rămas elemente.

a. Dacă i <= n atunci înseamnă că mai avem elemente în vectorul a, pe care le


luam în ordine și le adăugăm la finalul vectorului. b.

b. Daca j <= m atunci înseamnă că mai avem elemente în vectorul b, pe care le


luam în ordine și le adăugăm la finalul vectorului c.

4. Algoritmul se încheie, iar vectorul c conține elementele din a și din b


ordonate crescător, deci vom avea n+m elemente

int a[1001],b[1001],c[2001],i,j,k,n,m;
//citirea datelor
i=1;j=1;k=0;
while(i<=n && j<=m)
if (a[i]<=b[j]){ k++; c[k]=a[i]; i++;}
else ){ k++; c[k]=b[j]; j++;}
while (i<=n){ c[k]=a[i]; i++;k++;}
while (j<=m){ c[k]=b[j]; j++;k++}
//afișarea vectorului rezultat c

https://www.pbinfo.ro/articole/5588/interclasarea-tablourilor

S-ar putea să vă placă și