Sorted merge in one array
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++
#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;
while (j >= 0) {
if (i >= 0 && a[i] > b[j]) {
a[lastIndex] = a[i];
i--;
} else {
a[lastIndex] = b[j];
j--;
}
lastIndex--;
}
}
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
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 ;
while (j >= 0 )
{
if (i >= 0 && a[i] > b[j])
{
a[lastIndex] = a[i];
i--;
} else
{
a[lastIndex] = b[j];
j--;
}
lastIndex--;
}
}
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] + " " );
}
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);
}
}
|
Python3
NA = - 1
def sortedMerge(a, b, n, m):
i = n - 1
j = m - 1
lastIndex = n + m - 1
while (j > = 0 ) :
if (i > = 0 and a[i] > b[j]):
a[lastIndex] = a[i]
i - = 1
else :
a[lastIndex] = b[j]
j - = 1
lastIndex - = 1
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)
|
C#
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;
while (j >= 0)
{
if (i >= 0 && a[i] > b[j])
{
a[lastIndex] = a[i];
i--;
}
else
{
a[lastIndex] = b[j];
j--;
}
lastIndex--;
}
}
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] + " " );
}
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);
}
}
|
PHP
<?php
function sortedMerge( $a , $b , $n , $m )
{
$i = $n - 1;
$j = $m - 1;
$lastIndex = $n + $m - 1;
while ( $j >= 0)
{
if ( $i >= 0 && $a [ $i ] > $b [ $j ])
{
$a [ $lastIndex ] = $a [ $i ];
$i --;
}
else
{
$a [ $lastIndex ] = $b [ $j ];
$j --;
}
$lastIndex --;
}
return $a ;
}
function printArray( $arr , $n )
{
echo "Array A after merging B in sorted" ;
echo " order : \n" ;
for ( $i = 0; $i < $n ; $i ++)
echo $arr [ $i ] . " " ;
}
$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 );
?>
|
Javascript
<script>
function sortedMerge(a, b, n, m) {
let i = n - 1;
let j = m - 1;
let lastIndex = n + m - 1;
while (j >= 0) {
if (i >= 0 && a[i] > b[j]) {
a[lastIndex] = a[i];
i--;
}
else {
a[lastIndex] = b[j];
j--;
}
lastIndex--;
}
return a;
}
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] + " " );
}
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);
</script>
|
Output
Array 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)
Last Updated :
24 Nov, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...