Sorted merge in one array
Last Updated :
24 Nov, 2022
Given two sorted arrays, A and B, where A has a large enough buffer at the end to hold B.
Merge B into A in sorted order.
Examples:
Input : a[] = {10, 12, 13, 14, 18, NA, NA, NA, NA, NA}
b[] = {16, 17, 19, 20, 22};;
Output : a[] = {10, 12, 13, 14, 16, 17, 18, 19, 20, 22}
One way is to merge the two arrays by inserting the smaller elements in front of A, but the issue with this approach is that we have to shift every element to right after every insertion.
So, instead of comparing which one is a smaller element, we can compare which one is larger and then insert that element into the end of A.
Below is the solution for the above approach.
C++
// Merging b[] into a[]
#include <bits/stdc++.h>
using namespace std;
#define NA -1
void sortedMerge(int a[], int b[], int n, int m) {
int i = n - 1;
int j = m - 1;
int lastIndex = n + m - 1;
/* Merge a and b, starting from last element
in each */
while (j >= 0) {
/* End of a is greater than end of b */
if (i >= 0 && a[i] > b[j]) {
a[lastIndex] = a[i]; // Copy Element
i--;
} else {
a[lastIndex] = b[j]; // Copy Element
j--;
}
lastIndex--; // Move indices
}
}
/* Helper function to print the array */
void printArray(int *arr, int n) {
cout << "Array A after merging B in sorted"
" order : " << endl;
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
}
int main() {
int a[] = {10, 12, 13, 14, 18, NA, NA, NA, NA, NA};
int n = 5;
int size_a = 10;
int b[] = {16, 17, 19, 20, 22};
int m = 5;
sortedMerge(a, b, n, m);
printArray(a, size_a);
return 0;
}
Java
// Java program to merge B
// into A in sorted order.
import java.io.*;
class GFG
{
static int NA =-1;
static void sortedMerge(int a[], int b[], int n, int m)
{
int i = n - 1;
int j = m - 1;
int lastIndex = n + m - 1;
// Merge a and b, starting
// from last element in each
while (j >= 0)
{
/* End of a is greater than end of b */
if (i >= 0 && a[i] > b[j])
{
// Copy Element
a[lastIndex] = a[i];
i--;
} else
{
// Copy Element
a[lastIndex] = b[j];
j--;
}
// Move indices
lastIndex--;
}
}
// Helper function to print the array
static void printArray(int arr[], int n)
{
System.out.println ( "Array A after merging B in sorted order : " ) ;
for (int i = 0; i < n; i++)
System.out.print(arr[i] +" ");
}
// Driver code
public static void main (String[] args)
{
int a[] = {10, 12, 13, 14, 18, NA, NA, NA, NA, NA};
int n = 5;
int size_a = 10;
int b[] = {16, 17, 19, 20, 22};
int m = 5;
sortedMerge(a, b, n, m);
printArray(a, size_a);
}
}
// This code is contributed by vt_m.
Python3
# Python3 program to merge B
# into A in sorted order.
NA = -1
# Merging b[] into a[]
def sortedMerge(a, b, n, m):
i = n - 1
j = m - 1
lastIndex = n + m - 1
# Merge a and b, starting from last
# element in each
while (j >= 0) :
# End of a is greater than end
# of b
if (i >= 0 and a[i] > b[j]):
# Copy Element
a[lastIndex] = a[i]
i -= 1
else:
# Copy Element
a[lastIndex] = b[j]
j -= 1
# Move indices
lastIndex-= 1
# Helper function to print
# the array
def printArray(arr, n):
print("Array A after merging B in sorted order : ")
for i in range(0, n):
print(arr[i], end =" ")
size_a = 10
a = [10, 12, 13, 14, 18, NA, NA, NA, NA, NA]
n = 5
b = [16, 17, 19, 20, 22]
m = 5
sortedMerge(a, b, n, m)
printArray(a, size_a)
# This code is contributed by
# Smitha Dinesh Semwal
C#
// C# program to merge B into A in
// sorted order.
using System;
class GFG {
static int NA =-1;
static void sortedMerge(int []a, int []b,
int n, int m)
{
int i = n - 1;
int j = m - 1;
int lastIndex = n + m - 1;
// Merge a and b, starting
// from last element in each
while (j >= 0)
{
/* End of a is greater than
end of b */
if (i >= 0 && a[i] > b[j])
{
// Copy Element
a[lastIndex] = a[i];
i--;
}
else
{
// Copy Element
a[lastIndex] = b[j];
j--;
}
// Move indices
lastIndex--;
}
}
// Helper function to print the array
static void printArray(int []arr, int n)
{
Console.WriteLine ( "Array A after "
+ "merging B in sorted order : " ) ;
for (int i = 0; i < n; i++)
Console.Write(arr[i] +" ");
}
// Driver code
public static void Main ()
{
int []a = {10, 12, 13, 14, 18, NA,
NA, NA, NA, NA};
int n = 5;
int size_a = 10;
int []b = {16, 17, 19, 20, 22};
int m = 5;
sortedMerge(a, b, n, m);
printArray(a, size_a);
}
}
// This code is contributed by vt_m.
PHP
<?php
// PHP program to merge B into A in
// sorted order.
// Merging b[] into a[]
function sortedMerge($a, $b, $n, $m)
{
$i = $n - 1;
$j = $m - 1;
$lastIndex = $n + $m - 1;
/* Merge a and b, starting from
last element in each */
while ($j >= 0)
{
/* End of a is greater than end of b */
if ($i >= 0 && $a[$i] > $b[$j])
{
$a[$lastIndex] = $a[$i]; // Copy Element
$i--;
}
else
{
$a[$lastIndex] = $b[$j]; // Copy Element
$j--;
}
$lastIndex--; // Move indices
}
return $a;
}
/* Helper function to print the array */
function printArray($arr, $n)
{
echo "Array A after merging B in sorted";
echo " order : \n";
for ($i = 0; $i < $n; $i++)
echo $arr[$i] . " ";
}
// Driver Code
$a = array(10, 12, 13, 14, 18,
-1, -1, -1, -1, -1);
$n = 5;
$size_a = 10;
$b = array(16, 17, 19, 20, 22);
$m = 5;
$c = sortedMerge($a, $b, $n, $m);
printArray($c, $size_a);
// This code is contributed by Rajput-Ji.
?>
JavaScript
<script>
// Javascript program to merge B into A in
// sorted order.
// Merging b[] into a[]
function sortedMerge(a, b, n, m) {
let i = n - 1;
let j = m - 1;
let lastIndex = n + m - 1;
/* Merge a and b, starting from
last element in each */
while (j >= 0) {
/* End of a is greater than end of b */
if (i >= 0 && a[i] > b[j]) {
a[lastIndex] = a[i]; // Copy Element
i--;
}
else {
a[lastIndex] = b[j]; // Copy Element
j--;
}
lastIndex--; // Move indices
}
return a;
}
/* Helper function to print the array */
function printArray(arr, n) {
document.write("Array A after merging B in sorted");
document.write(" order : <br>");
for (let i = 0; i < n; i++)
document.write(arr[i] + " ");
}
// Driver Code
let a = [10, 12, 13, 14, 18,
-1, -1, -1, -1, -1];
let n = 5;
let size_a = 10;
let b = new Array(16, 17, 19, 20, 22);
let m = 5;
let c = sortedMerge(a, b, n, m);
printArray(c, size_a);
// This code is contributed by gfgking.
</script>
OutputArray A after merging B in sorted order :
10 12 13 14 16 17 18 19 20 22
Time Complexity: O(m+n).
Auxiliary Space: O(1)
Similar Reads
Merge k Sorted Arrays Given K sorted arrays, merge them and print the sorted output.Examples:Input: K = 3, arr = { {1, 3, 5, 7}, {2, 4, 6, 8}, {0, 9, 10, 11}}Output: 0 1 2 3 4 5 6 7 8 9 10 11 Input: k = 4, arr = { {1}, {2, 4}, {3, 7, 9, 11}, {13} }Output: 1 2 3 4 7 9 11 13Table of ContentNaive - Concatenate all and SortU
15+ min read
JavaScript Array sort() Method The JS array.sort() method rearranges the array elements alphabetically and returns a sorted array. It does not create a new array but updates the original array.Sorting Array of StringsJavaScript// Original array let ar = ["JS", "HTML", "CSS"]; console.log(ar); // Sorting the array ar.sort() consol
4 min read
Check if array can be sorted with one swap Given an array containing N elements. Find if it is possible to sort it in non-decreasing order using atmost one swap. Examples: Input : arr[] = {1, 2, 3, 4} Output : YES The array is already sorted Input : arr[] = {3, 2, 1} Output : YES Swap 3 and 1 to get [1, 2, 3] Input : arr[] = {4, 1, 2, 3} Out
11 min read
Array Sorting - Practice Problems Sorting an array means arranging the elements of the array in a certain order. Generally sorting in an array is done to arrange the elements in increasing or decreasing order. Problem statement: Given an array of integers arr, the task is to sort the array in ascending order and return it, without u
9 min read
Sort given words as Array of Strings Given an array of strings Arr[]. The task is to sort them in lexicographic order. Examples: Input: Arr[] = {"sort", "this", "list"}Output: [list, sort, this] Input: Arr[] = {"sun", "earth", "mars", "mercury"}Output: [earth, mars, mercury, sun] Selection Sort Approach: The same problem can also be so
15+ min read