Merge two sorted arrays using Priority queue
Last Updated :
18 Oct, 2022
Given two sorted arrays A[] and B[] of sizes N and M respectively, the task is to merge them in a sorted manner.
Examples:
Input: A[] = { 5, 6, 8 }, B[] = { 4, 7, 8 }
Output: 4 5 6 7 8 8
Input: A[] = {1, 3, 4, 5}, B] = {2, 4, 6, 8}
Output: 1 2 3 4 4 5 6 8
Input: A[] = {5, 8, 9}, B[] = {4, 7, 8}
Output: 4 5 7 8 8 9
Approach: The given problem, merging two sorted arrays using minheap already exists. But here the idea is to use a priority_queue to implement min-heap provided by STL. Follow the steps below to solve the problem:
Below is the implementation of the above approach:
C++
// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to merge two arrays
void merge(int A[], int B[], int N, int M)
{
// Stores the merged array
int res[N + M];
// Create a min priority_queue
priority_queue<int, vector<int>, greater<int> > pq;
// Traverse the array A[]
for (int i = 0; i < N; i++)
pq.push(A[i]);
// Traverse the array B[]
for (int i = 0; i < M; i++)
pq.push(B[i]);
int j = 0;
// Iterate until the
// pq is not empty
while (!pq.empty()) {
// Stores the top element
// of pq into res[j]
res[j++] = pq.top();
// Removes the top element
pq.pop();
}
// Print the merged array
for (int i = 0; i < N + M; i++)
cout << res[i] << ' ';
}
// Driver Code
int main()
{
// Input
int A[] = { 5, 6, 8 };
int B[] = { 4, 7, 8 };
int N = sizeof(A) / sizeof(A[0]);
int M = sizeof(B) / sizeof(B[0]);
// Function call
merge(A, B, N, M);
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG{
// Function to merge two arrays
static void merge(int A[], int B[], int N, int M)
{
// Stores the merged array
int []res = new int[N + M];
// Create a min priority_queue
Queue<Integer> pq = new PriorityQueue<>();
// Traverse the array A[]
for(int i = 0; i < N; i++)
pq.add(A[i]);
// Traverse the array B[]
for(int i = 0; i < M; i++)
pq.add(B[i]);
int j = 0;
// Iterate until the
// pq is not empty
while (!pq.isEmpty())
{
// Stores the top element
// of pq into res[j]
res[j++] = pq.peek();
// Removes the top element
pq.remove();
}
// Print the merged array
for(int i = 0; i < N + M; i++)
System.out.print(res[i] + " ");
}
// Driver Code
public static void main(String[] args)
{
// Input
int A[] = { 5, 6, 8 };
int B[] = { 4, 7, 8 };
int N = A.length;
int M = B.length;
// Function call
merge(A, B, N, M);
}
}
// This code is contributed by todaysgaurav
Python3
# Python3 program for the above approach
from queue import PriorityQueue
# Function to merge two arrays
def merge(A, B, N, M):
# Stores the merged array
res = [0 for i in range(N + M)]
# Create a min priority_queue
pq = PriorityQueue()
# Traverse the array A[]
for i in range(N):
pq.put(A[i])
# Traverse the array B[]
for i in range(M):
pq.put(B[i])
j = 0
# Iterate until the
# pq is not empty
while not pq.empty():
# Removes the top element and
# stores it into res[j]
res[j] = pq.get()
j += 1
# Print the merged array
for i in range(N + M):
print(res[i], end = " ")
# return back to main
return
# Driver code
if __name__ == '__main__':
# Input
A = [ 5, 6, 8 ]
B = [ 4, 7, 8 ]
N = len(A)
M = len(B)
# Function call
merge(A, B, N, M)
# This code is contributed by MuskanKalra1
C#
// C# program for the above approach.
using System;
using System.Collections.Generic;
public class GFG {
public static int cmp(int a, int b) { return a - b; }
// Function to merge two arrays
static void merge(int[] A, int[] B, int N, int M)
{
// Stores the merged array
int[] res = new int[N + M];
// Create a min priority_queue using List and cmp
// comparator
List<int> pq = new List<int>();
// Traverse the array A[]
for (int i = 0; i < N; i++)
pq.Add(A[i]);
// Traverse the array B[]
for (int i = 0; i < M; i++)
pq.Add(B[i]);
int j = 0;
pq.Sort(cmp);
// Iterate until the
// pq is not empty
int index = 0;
while (index < pq.Count) {
// Stores the top element
// of pq into res[j]
res[j++] = pq[index];
// Removes the top element
index++;
}
// Print the merged array
for (int i = 0; i < N + M; i++)
Console.Write(res[i] + " ");
}
public static void Main(string[] args)
{
// Input
int[] A = { 5, 6, 8 };
int[] B = { 4, 7, 8 };
int N = A.Length;
int M = B.Length;
// Function call
merge(A, B, N, M);
}
}
// This code is contributed by adityamaharshi21.
JavaScript
<script>
// Javascript program for the above approach
// Function to merge two arrays
function merge(A, B, N, M)
{
// Stores the merged array
var res = Array(N+M).fill(0);
// Create a min priority_queue
var pq = [];
// Traverse the array A[]
for (var i = 0; i < N; i++)
pq.push(A[i]);
// Traverse the array B[]
for (var i = 0; i < M; i++)
pq.push(B[i]);
var j = 0;
pq.sort((a,b)=>b-a);
// Iterate until the
// pq is not empty
while (pq.length!=0) {
// Stores the top element
// of pq into res[j]
res[j++] = pq[pq.length-1];
// Removes the top element
pq.pop();
pq.sort((a,b)=>b-a);
}
// Print the merged array
for (var i = 0; i < N + M; i++)
document.write(res[i] + ' ');
}
// Driver Code
// Input
var A = [5, 6, 8];
var B = [4, 7, 8];
var N = A.length;
var M = B.length;
// Function call
merge(A, B, N, M);
// This code is contributed by rrrtnx.
</script>
Time Complexity: O((N+M)*log(N+M))
Auxiliary Space: O(N+M)
Similar Reads
Priority Queue Using Array A priority queue is a data structure that stores elements with associated priorities. In a priority queue, elements are dequeued in order of their priority, with the highest priority elements being removed first. It is commonly used in algorithms like Dijkstra's for shortest path and in real-time sc
8 min read
Merge two sorted arrays in Python using heapq Given two sorted arrays, the task is to merge them in a sorted manner. Examples: Input : arr1 = [1, 3, 4, 5] arr2 = [2, 4, 6, 8] Output : arr3 = [1, 2, 3, 4, 4, 5, 6, 8] Input : arr1 = [5, 8, 9] arr2 = [4, 7, 8] Output : arr3 = [4, 5, 7, 8, 8, 9] This problem has existing solution please refer Merge
2 min read
Merge two sorted arrays Given two sorted arrays, the task is to merge them in a sorted manner.Examples: Input: arr1[] = { 1, 3, 4, 5}, arr2[] = {2, 4, 6, 8} Output: arr3[] = {1, 2, 3, 4, 4, 5, 6, 8}Input: arr1[] = { 5, 8, 9}, arr2[] = {4, 7, 8} Output: arr3[] = {4, 5, 7, 8, 8, 9} Table of Content[Naive Approach] Concatenat
10 min read
Merge k Sorted Arrays Using Min Heap Given k sorted arrays of possibly different sizes, merge them and print the sorted output.Examples:Input: k = 3 arr[][] = { {1, 3}, {2, 4, 6}, {0, 9, 10, 11}} ;Output: 0 1 2 3 4 6 9 10 11 Input: k = 2 arr[][] = { {1, 3, 20}, {2, 4, 6}} ;Output: 1 2 3 4 6 20 We have discussed a solution that works fo
7 min read
Merging two unsorted arrays in sorted order Write a SortedMerge() function that takes two lists, each of which is unsorted, and merges the two together into one new list which is in sorted (increasing) order. SortedMerge() should return the new list. Examples : Input : a[] = {10, 5, 15} b[] = {20, 3, 2} Output : Merge List : {2, 3, 5, 10, 15,
12 min read