Sunteți pe pagina 1din 3

Interclasarea a doi vectori in C++

By Matraguna Mihai Last updated Dec 2, 2017


0
Share

Algoritm pentru interclasarea a doi


vectori
Inainte de a incepe trebuie sa mentionez faptul ca acest algoritm functioneaza doar daca
avem doi vectori ce au elementele stocate in ordine crescatoare (sau descrescatoare).
Scopul acestui algoritm este sa creeze un al treilea vector ce contine elementele din cei
doi vectori. Bine-nteles, sortate crescator/descrescator in functie de cum erau cei doi
vectori sortati initial.

Haideti sa luam un mic exemplu pe care sa lucram in continuare:

O solutie care ar rezolva problema destul de rapid este sa lipim cei doi vectori. Si sa
obtinem vectorul C = {3, 5, 6, 7, 1, 4, 8}; dupa aceea sortam vectorul crescator si obtinem
C = {1, 3, 4, 5, 6, 7, 8}; . Insa aceasta rezolvare nu este cea mai eficienta, datorita
sortarii. Dupa cum am discutat intr-un articol recent pe site, este de preferat sa evitam
sortarea de fiecare data cand putem.

Algoritmul de interclasare este:


1. Declaram un vector C – gol (k = 0)
2. Cat timp se afla elemente in ambii vectori (i <= n si j <= m):
a. Comparam elementul Ai cu Bj
b. Incrementam k
c. Adaugam in C, pe pozitia k, elementul cel mai mic intre Ai cu Bj
d. Incrementam indicele corespunzator vectorului din care am facut
adaugarea (incrementam i daca elementul Ai a fost mai mic, si in caz
contrar, incrementam j)
3. Verificam in care dintre cei doi vectori au mai ramas elemente.
a. Daca i <= n atunci inseamna ca mai avem elemente in vectorul A, pe care
le luam in ordine si le adaugam la finalul vectorului C.
b. Daca j <= m atunci inseamna ca mai avem elemente in vectorul B, pe care
le luam in ordine si le adaugam la finalul vectorului C.
4. Algoritmul se incheie, iar vectorul C contine elementele din A si din B ordonate
crescator.

Implementarea in C++:

1 #include <iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 int A[100], B[100], C[100];
8 int n, m, k = 0;
9
10 cout << "Introduceti numarul de elemente corespunzator vectorului A: "; cin >> n;
11 cout << "Introduceti elementele vectorului A: ";
12 for(int i = 0; i < n; i++)
13 cin >> A[i];
14
15 cout << "Introduceti numarul de elemente corespunzator vectorului B: "; cin >> m;
16 cout << "Introduceti elementele vectorului B: ";
17 for(int i = 0; i < m; i++)
18 cin >> B[i];
19
20 int i = 0, j = 0;
21 while(i < n && j < m)
22 {
23 if(A[i] < B[j])
24 {
25 C[k] = A[i];
26 k++;
27 i++;
28 }
29 else
30 {
31 C[k] = B[j];
32 k++;
33 j++;
34 }
35 }
36
37 if(i <= n)
38 {
39 for(int p = i; p < n; p++)
40 {
41 C[k] = A[p];
42 k++;
43 }
44 }
45 if(j <= m)
46 {
47 for(int p = j; p < m; p++)
48 {
49 C[k] = B[p];
50 k++;
51 }
52 }
53
54 for(int p = 0; p < k; p++)
55 cout << C[p] << " ";
56
57 return 0;
58 }
 Variabila i retine indicele elementului curent din A
 Variabila j retine indicele elementului curent din B
 Variabila k memoreaza numarul total de elemente din C. Deoarece primul element
din C va fi adaugat pe pozitia 0, k va fi initial zero.
 La fiecare pas comparam elementul Ai cu elementul Bj iar cel mai mic este
adaugat in C, pe pozitia k
 In momentul cand am iesit din while, completam restul elementelor ramase.

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