Documente Academic
Documente Profesional
Documente Cultură
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.
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.