Sunteți pe pagina 1din 2

Tudor L.

, Bazele programrii n limbajul C++, Editura MATRIX ROM, Bucureti, ISBN 978-973-755-644-8,
2010

Interclasarea a doi vectori ordonai

Fie vectorii A i B ordonai cresctor, definii astfel:
A = ( a[1], . . . , a[m] )
B = ( b[1], . . . , b[n] )

Se cere s se interclaseze elementele celor doi vectori, adic s se
construiasc un vector C avnd elementele :

C = ( c[1], c[2], . . . , c[m+n] )
care s conin att elementele lui A, ct i elementele lui B n ordine cresctoare.

Exemplu :
Fie vectorii A = ( 1, 2, 7, 3) i B = ( 3, 5, 6, 7, 8, 10 ). Se obine vectorul C = (
1, 2, 3, 3, 5, 6, 7, 7, 8, 10 ).


Algoritmul de interclasare a doi vectori este urmtorul :

- Se compar a[i] cu b[j], fiind posibile dou cazuri :

dac a[i] < b[j], se introduc n vectorul C elementul a[i], ct i
elementele care i succed lui a[i] n vectorul A i sunt mai mici dect
b[j]

dac b[j] < a[i], se introduc n vectorul C elementul b[j], ct i
elementele care i succed lui b[j] n vectorul B i sunt mai mici dect
a[i]


- n momentul n care toate elementele unui vector sunt introduse n vectorul C,
elementele rmase neparcurse ale celuilalt vector sunt introduse n C i
algoritmul se termin.




Tudor L., Bazele programrii n limbajul C++, Editura MATRIX ROM, Bucureti, ISBN 978-973-755-644-8,
2010

Algoritmul n limbaj pseudocod pentru interclasarea a doi vectori
ordonai cresctor este urmtorul :

procedure interclasare ( A, m, B, n, C)
array A(m), B(n), C(m+n)
i 1
j 1
k 0
while ( i m) and ( j n):
k k + 1
if a[i] < b[j] then c[k] a[i]
i i + 1
else c[k] b[j]
j j + 1
endif
repeat
if i > m then for t = j, n
k k + 1
c[k] b[t]
repeat
else for t = i, m
k k + 1
c[k] a[t]
repeat
endif
return
end


n acest algoritm, sunt utilizate urmtoarele notaii:
i desemneaz elementul curent n vectorul A;
j este indicele elementului curent din vectorul B;
k este indicele ultimului element din vectorul C, cruia i s-a atribuit o valoare.