1+ // Link to the Problem:
2+ // https://practice.geeksforgeeks.org/problems/merge-two-sorted-arrays-1587115620/1
3+
4+ // Sample Test Case
5+
6+ /*
7+
8+ Input:
9+ n = 4, arr1[] = [1 3 5 7]
10+ m = 5, arr2[] = [0 2 6 8 9]
11+
12+
13+ Output:
14+ arr1[] = [0 1 2 3]
15+ arr2[] = [5 6 7 8 9]
16+
17+
18+ we start from end of first array and start of second array
19+ i.e i points to index 3 of first array and j points to index 0 of second array
20+
21+ i=3
22+ j=0
23+
24+ since 7>0, we swap both of them, now array becomes
25+
26+ arr1[] = [1 3 5 0]
27+ arr2[] = [7 2 6 8 9]
28+
29+ i=2
30+ j=1
31+
32+ since 5>2
33+
34+ arr1[] = [1 3 2 0]
35+ arr2[] = [7 5 6 8 9]
36+
37+ i=1
38+ j=2
39+
40+ 3 is not greater than 6, for loop breaks and we come out of the loop
41+
42+
43+ Now we sort the arrays and get the o/p as follows:
44+
45+ arr1[] = [0 1 2 3]
46+ arr2[] = [5 6 7 8 9]
47+
48+ */
49+
50+ #include < bits/stdc++.h>
51+ using namespace std ;
52+
53+ class Solution
54+ {
55+ public:
56+ void merge (int arr1[], int arr2[], int n, int m)
57+ {
58+
59+ // Starting from last index of first array and first index of second arary
60+ int i = n - 1 ;
61+ int j = 0 ;
62+
63+ // iterating till the small array is traversed [Note that AND operator is
64+ // used]
65+ while (i >= 0 && j < m)
66+ {
67+ if (arr1[i] > arr2[j])
68+ {
69+ swap (arr1[i], arr2[j]);
70+ i--;
71+ j++;
72+ }
73+ else
74+ {
75+ break ;
76+ }
77+ }
78+
79+ // Sorting both the arrays as the order in which element occured would
80+ // have changed
81+ sort (arr1, arr1 + n);
82+ sort (arr2, arr2 + m);
83+ }
84+ };
85+
86+ int main ()
87+ {
88+ int t;
89+ cin >> t;
90+ while (t--)
91+ {
92+
93+ // n -> Size of first Array
94+ // m -> Size of Second Array
95+ // i -> Iterator
96+ // arr1 -> First Array
97+ // arr2 ->Second Array
98+ int n, m, i;
99+ cin >> n >> m;
100+ int arr1[n], arr2[m];
101+ for (i = 0 ; i < n; i++)
102+ {
103+ cin >> arr1[i];
104+ }
105+ for (i = 0 ; i < m; i++)
106+ {
107+ cin >> arr2[i];
108+ }
109+
110+ // Creating an instance of class
111+ Solution ob;
112+ ob.merge (arr1, arr2, n, m);
113+ for (i = 0 ; i < n; i++)
114+ {
115+ cout << arr1[i] << " " ;
116+ }
117+ for (i = 0 ; i < m; i++)
118+ {
119+ cout << arr2[i] << " " ;
120+ }
121+ cout << " \n " ;
122+ }
123+ return 0 ;
124+ }
0 commit comments