Skip to content

Commit b0cd7d8

Browse files
committed
add: Merge Sorted Array
1 parent 9771185 commit b0cd7d8

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

Diff for: array/MergeSortedArray.cpp

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
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

Comments
 (0)