1
+ #include < bits/stdc++.h>
2
+ using namespace std ;
3
+
4
+ class Solution {
5
+ public:
6
+ // Time Complexity: O(n * mlog(m))
7
+ // Space Complexity: O(1)
8
+ // TLE
9
+ void mergeApproachOne (int arr1[], int arr2[], int n, int m) {
10
+ int j = 0 ;
11
+ for (int i = 0 ; i < n; i++) {
12
+ if (arr1[i] > arr2[0 ]) {
13
+ swap (arr1[i], arr2[0 ]);
14
+ sort (arr2, arr2 + m);
15
+ }
16
+ }
17
+ }
18
+
19
+ // GAP Algorithm
20
+ // Time Complexity: O(n+m * log2(n+m))
21
+ // Space Complexity: O(1)
22
+ // AC
23
+ int nextGap (int gap) {
24
+ if (gap <= 1 )
25
+ return 0 ;
26
+ return (gap / 2 ) + (gap % 2 );
27
+ }
28
+ void merge (int arr1[], int arr2[], int n, int m) {
29
+ int i, j, gap = n + m;
30
+ for (gap = nextGap (gap); gap > 0 ; gap = nextGap (gap)) {
31
+ for (i = 0 ; i + gap < n; i++) {
32
+ if (arr1[i] > arr1[i + gap]) {
33
+ swap (arr1[i], arr1[i + gap]);
34
+ }
35
+ }
36
+
37
+ for (j = gap > n ? gap - n : 0 ; j < m && i < n; j++, i++) {
38
+ if (arr1[i] > arr2[j]) {
39
+ swap (arr1[i], arr2[j]);
40
+ }
41
+ }
42
+
43
+ if (j < m) {
44
+ for (j = 0 ; j + gap < m; j++) {
45
+ if (arr2[j] > arr2[j + gap]) {
46
+ swap (arr2[j], arr2[j + gap]);
47
+ }
48
+ }
49
+ }
50
+ }
51
+ }
52
+ };
53
+
54
+ int main () {
55
+ int t;
56
+ cin >> t;
57
+ while (t--) {
58
+ int n, m, i;
59
+ cin >> n >> m;
60
+ int arr1[n], arr2[m];
61
+ for (i = 0 ; i < n; i++) {
62
+ cin >> arr1[i];
63
+ }
64
+ for (i = 0 ; i < m; i++) {
65
+ cin >> arr2[i];
66
+ }
67
+ Solution ob;
68
+ ob.merge (arr1, arr2, n, m);
69
+ for (i = 0 ; i < n; i++) {
70
+ cout << arr1[i] << " " ;
71
+ }
72
+ for (i = 0 ; i < m; i++) {
73
+ cout << arr2[i] << " " ;
74
+ }
75
+ cout << " \n " ;
76
+ }
77
+ return 0 ;
78
+ }
0 commit comments