समस्या कथन
दो सॉर्ट की गई सरणियाँ दी गई हैं। दी गई दो सॉर्ट की गई सरणियों को एक में मर्ज करने के लिए एक फ़ंक्शन लिखें।
Arr1[] = {10, 15, 17, 20}
Arr2[] = {5, 9, 13, 19}
Result[] = {5, 9, 10, 13, 15, 17, 19, 20}
एल्गोरिदम
1. दोनों सरणियों को पार करें
1.1. यदि arr1[i] < arr2[j]
1.1.1. arr[i] को नई सरणी में जोड़ें
1.1.2. 'i' और परिणाम सरणी के इंडेक्स 'k' को बढ़ाएं
1.2. यदि arr2[j] < arr1[i]
1.2.1. arr[j] को नई सरणी में जोड़ें
1.2.2. 'j' और परिणाम सरणी के इंडेक्स 'k' को बढ़ाएं
2. प्रक्रिया को तब तक दोहराएं जब तक दोनों सरणियां समाप्त न हो जाएं
3. परिणामी सरणी लौटाएं
C++ उदाहरण
#include <iostream>
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
using namespace std;
void mergeSortedArrays(int *arr1, int n1, int *arr2, int n2, int *result) {
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
if (arr1[i] < arr2[j]) {
result[k++] = arr1[i++];
} else {
result[k++] = arr2[j++];
}
}
while (i < n1) result[k++] = arr1[i++];
while (j < n2) result[k++] = arr2[j++];
}
void dispalyArray(int *arr, int n) {
for (int i = 0; i < n; ++i) cout << arr[i] << " ";
cout << endl;
}
int main() {
int arr1[] = {10, 15, 17, 20};
int arr2[] = {5, 9, 13, 19};
int result[SIZE(arr1) + SIZE(arr2)];
cout << "First sorted array:" << endl;
dispalyArray(arr1, SIZE(arr1));
cout << "Second sorted array:" << endl;
dispalyArray(arr2, SIZE(arr2));
mergeSortedArrays(arr1, SIZE(arr1), arr2, SIZE(arr2), result);
cout << "Final sorted array:" << endl;
dispalyArray(result, SIZE(result));
return 0;
}
आउटपुट
First sorted array: 10 15 17 20 Second sorted array: 5 9 13 19 Final sorted array: 5 9 10 13 15 17 19 20