Skip to content
Related Articles

Related Articles

Sort an array when two halves are sorted

View Discussion
Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 06 Jul, 2022

Given an integer array of which both first half and second half are sorted. Task is to merge two sorted halves of array into single sorted array.

Examples: 

Input : A[] = { 2, 3, 8, -1, 7, 10 }
Output : -1, 2, 3, 7, 8, 10 

Input : A[] = {-4, 6, 9, -1, 3 }
Output : -4, -1, 3, 6, 9
Recommended Practice

Method 1: A Simple Solution is to sort the array using built in functions (generally an implementation of quick sort). 

Below is the implementation of above method:

C++




// C++ program to Merge two sorted halves of
// array Into Single Sorted Array
#include <bits/stdc++.h>
using namespace std;
 
void mergeTwoHalf(int A[], int n)
{
    // Sort the given array using sort STL
    sort(A, A + n);
}
 
// Driver code
int main()
{
    int A[] = { 2, 3, 8, -1, 7, 10 };
    int n = sizeof(A) / sizeof(A[0]);
    mergeTwoHalf(A, n);
 
    // Print sorted Array
    for (int i = 0; i < n; i++)
        cout << A[i] << " ";
    return 0;
}


Java




// Java program to Merge two sorted halves of
// array Into Single Sorted Array
import java.io.*;
import java.util.*;
 
class GFG {
 
    static void mergeTwoHalf(int[] A, int n)
    {
        // Sort the given array using sort STL
        Arrays.sort(A);
    }
 
    // Driver code
    static public void main(String[] args)
    {
        int[] A = { 2, 3, 8, -1, 7, 10 };
        int n = A.length;
        mergeTwoHalf(A, n);
 
        // Print sorted Array
        for (int i = 0; i < n; i++)
            System.out.print(A[i] + " ");
    }
}
 
// This code is contributed by vt_m .


Python3




# Python program to Merge two sorted
# halves of array Into Single Sorted Array
 
 
def mergeTwoHalf(A, n):
 
    # Sort the given array using sort STL
    A.sort()
 
 
# Driver Code
if __name__ == '__main__':
    A = [2, 3, 8, -1, 7, 10]
    n = len(A)
    mergeTwoHalf(A, n)
 
    # Print sorted Array
    for i in range(n):
        print(A[i], end=" ")
 
# This code is contributed by 29AjayKumar


C#




// C# program to Merge two sorted halves of
// array Into Single Sorted Array
using System;
 
class GFG {
 
    static void mergeTwoHalf(int[] A, int n)
    {
        // Sort the given array using sort STL
        Array.Sort(A);
    }
 
    // Driver code
    static public void Main()
    {
        int[] A = { 2, 3, 8, -1, 7, 10 };
        int n = A.Length;
        mergeTwoHalf(A, n);
 
        // Print sorted Array
        for (int i = 0; i < n; i++)
            Console.Write(A[i] + " ");
    }
}
 
// This code is contributed by vt_m .


PHP




<?php
// PHP program to Merge two sorted halves
// of array Into Single Sorted Array
 
function mergeTwoHalf(&$A, $n)
{
    // Sort the given array using sort STL
    sort($A, 0);
}
 
// Driver Code
$A = array(2, 3, 8, -1, 7, 10);
$n = sizeof($A);
mergeTwoHalf($A, $n);
 
// Print sorted Array
for ($i = 0; $i < $n; $i++)
    echo $A[$i] . " ";
 
// This code is contributed
// by Akanksha Rai
?>


Javascript




<script>
 
// Javascript program to Merge two sorted halves of
// array Into Single Sorted Array
 
function mergeTwoHalf(A, n)
{
    // Sort the given array using sort function
    A.sort((a,b) => a-b);
}
 
// Driver code
var A = [ 2, 3, 8, -1, 7, 10 ];
var n = A.length;
mergeTwoHalf(A, n);
 
// Print sorted Array
for (var i = 0; i < n; i++)
    document.write( A[i] + " ");
 
// This code is contributed by itsok.
</script>


Output

-1 2 3 7 8 10 

Time Complexity: 

*** QuickLaTeX cannot compile formula:
 

*** Error message:
Error: Nothing to show, formula is empty

best & average case, O(n^2)    worst case (for quicksort)
Space Complexity: 

*** QuickLaTeX cannot compile formula:
 

*** Error message:
Error: Nothing to show, formula is empty

to 

*** QuickLaTeX cannot compile formula:
 

*** Error message:
Error: Nothing to show, formula is empty

depending on the case & implementation (for quicksort)

For more details, check out the GFG article on Quicksort.

Method 2: A more efficient solution is to use an auxiliary array which is very similar to the Merge Function of Merge sort

Below is the implementation of above approach : 

C++




// C++ program to Merge Two Sorted Halves Of
// Array Into Single Sorted Array
#include <bits/stdc++.h>
using namespace std;
 
// Merge two sorted halves of Array into single
// sorted array
void mergeTwoHalf(int A[], int n)
{
    int half_i = 0; // starting index of second half
 
    // Temp Array store sorted resultant array
    int temp[n];
 
    // First Find the point where array is divide
    // into two half
    for (int i = 0; i < n - 1; i++) {
        if (A[i] > A[i + 1]) {
            half_i = i + 1;
            break;
        }
    }
 
    // If Given array is all-ready sorted
    if (half_i == 0)
        return;
 
    // Merge two sorted arrays in single sorted array
    int i = 0, j = half_i, k = 0;
    while (i < half_i && j < n) {
        if (A[i] < A[j])
            temp[k++] = A[i++];
        else
            temp[k++] = A[j++];
    }
 
    // Copy the remaining elements of A[i to half_! ]
    while (i < half_i)
        temp[k++] = A[i++];
 
    // Copy the remaining elements of A[ half_! to n ]
    while (j < n)
        temp[k++] = A[j++];
 
    for (int i = 0; i < n; i++)
        A[i] = temp[i];
}
 
// Driver code
int main()
{
    int A[] = { 2, 3, 8, -1, 7, 10 };
    int n = sizeof(A) / sizeof(A[0]);
    mergeTwoHalf(A, n);
 
    // Print sorted Array
    for (int i = 0; i < n; i++)
        cout << A[i] << " ";
    return 0;
}


Java




// Java program to Merge Two Sorted Halves Of
// Array Into Single Sorted Array
import java.io.*;
 
class GFG {
 
    // Merge two sorted halves of Array
    // into single sorted array
    static void mergeTwoHalf(int[] A, int n)
    {
        int half_i = 0; // starting index of second half
        int i;
 
        // Temp Array store sorted resultant array
        int[] temp = new int[n];
 
        // First Find the point where array is divide
        // into two half
        for (i = 0; i < n - 1; i++) {
            if (A[i] > A[i + 1]) {
                half_i = i + 1;
                break;
            }
        }
 
        // If Given array is all-ready sorted
        if (half_i == 0)
            return;
 
        // Merge two sorted arrays in single sorted array
        i = 0;
        int j = half_i;
        int k = 0;
        while (i < half_i && j < n) {
            if (A[i] < A[j])
                temp[k++] = A[i++];
            else
                temp[k++] = A[j++];
        }
 
        // Copy the remaining elements of A[i to half_! ]
        while (i < half_i)
            temp[k++] = A[i++];
 
        // Copy the remaining elements of A[ half_! to n ]
        while (j < n)
            temp[k++] = A[j++];
 
        for (i = 0; i < n; i++)
            A[i] = temp[i];
    }
 
    // Driver code
    static public void main(String[] args)
    {
        int[] A = { 2, 3, 8, -1, 7, 10 };
        int n = A.length;
        mergeTwoHalf(A, n);
 
        // Print sorted Array
        for (int i = 0; i < n; i++)
            System.out.print(A[i] + " ");
    }
}
 
// This code is contributed by vt_m .


Python3




# Python3 program to Merge Two Sorted Halves Of
# Array Into Single Sorted Array
 
# Merge two sorted halves of Array into single
# sorted array
def mergeTwoHalf(A, n):
     
    # Starting index of second half
    half_i = 0   
 
    # Temp Array store sorted resultant array
    temp = [0 for i in range(n)]
 
    # First Find the point where array is
    # divide into two half
    for i in range(n - 1):
        if (A[i] > A[i + 1]):
            half_i = i + 1
            break
 
    # If Given array is all-ready sorted
    if (half_i == 0):
        return
 
    # Merge two sorted arrays in single
    # sorted array
    i = 0
    j = half_i
    k = 0
     
    while (i < half_i and j < n):
        if (A[i] < A[j]):
            temp[k] = A[i]
            k += 1
            i += 1
        else:
            temp[k] = A[j]
            k += 1
            j += 1
     
    # Copy the remaining elements of A[i to half_! ]
    while i < half_i:
        temp[k] = A[i]
        k += 1
        i += 1
 
    # Copy the remaining elements of A[ half_! to n ]
    while (j < n):
        temp[k] = A[j]
        k += 1
        j += 1
 
    for i in range(n):
        A[i] = temp[i]
 
# Driver code
A = [ 2, 3, 8, -1, 7, 10 ]
n = len(A)
 
mergeTwoHalf(A, n)
 
# Print sorted Array
print(*A, sep = ' ')
 
# This code is contributed by avanitrachhadiya2155


C#




// C# program to Merge Two Sorted Halves Of
// Array Into Single Sorted Array
using System
 
    class GFG {
 
    // Merge two sorted halves of Array
    // into single sorted array
    static void mergeTwoHalf(int[] A, int n)
    {
        int half_i = 0
            // starting index of second half
            int i
 
            // Temp Array store sorted resultant array
            int[] temp
            = new int[n]
 
            // First Find the point where array is divide
            // into two half
            for (i = 0 i < n - 1 i++)
        {
            if (A[i] > A[i + 1]) {
                half_i = i + 1 break
            }
        }
 
        // If Given array is all-ready sorted
        if (half_i == 0)
            return
 
                // Merge two sorted arrays in single sorted
                // array
                i = 0 int j = half_i int k
                = 0 while (i < half_i & &j < n)
            {
                if (A[i] < A[j])
                    temp[k++] = A[i++] else temp[k++]
                        = A[j++]
            }
 
        // Copy the remaining elements of A[i to half_!]
        while (i < half_i)
            temp[k++] = A[i++]
 
                // Copy the remaining elements of A[half_!
                // to n]
                while (j < n) temp[k++]
                = A[j++]
 
                for (i = 0 i < n i++) A[i]
                = temp[i]
    }
 
    // Driver code
    static public void Main()
    {
        int[] A
            = { 2,
                3,
                8,
                -1,
                7,
                10 } int n
            = A.Length mergeTwoHalf(A, n)
 
              // Print sorted Array
              for (int i = 0 i < n i++)
                  Console.Write(A[i] + " ")
    }
}
 
// This code is contributed by vt_m .


Javascript




<script>
 
    // JavaScript program to Merge Two Sorted Halves Of
    // Array Into Single Sorted Array
     
    // Merge two sorted halves of Array into single
    // sorted array
    function mergeTwoHalf(A, n)
    {
        let half_i = 0; // starting index of second half
 
        // Temp Array store sorted resultant array
        let temp = new Array(n);
        temp.fill(0);
 
        // First Find the point where array is divide
        // into two half
        for (let i = 0; i < n - 1; i++) {
            if (A[i] > A[i + 1]) {
                half_i = i + 1;
                break;
            }
        }
 
        // If Given array is all-ready sorted
        if (half_i == 0)
            return;
 
        // Merge two sorted arrays in single sorted array
        let i = 0, j = half_i, k = 0;
        while (i < half_i && j < n) {
            if (A[i] < A[j])
                temp[k++] = A[i++];
            else
                temp[k++] = A[j++];
        }
 
        // Copy the remaining elements of A[i to half_! ]
        while (i < half_i)
            temp[k++] = A[i++];
 
        // Copy the remaining elements of A[ half_! to n ]
        while (j < n)
            temp[k++] = A[j++];
 
        for (let i = 0; i < n; i++)
            A[i] = temp[i];
    }
     
    let A = [ 2, 3, 8, -1, 7, 10 ];
    let n = A.length;
    mergeTwoHalf(A, n);
  
    // Print sorted Array
    for (let i = 0; i < n; i++)
        document.write(A[i] + " ");
             
</script>


Output

-1 2 3 7 8 10 

Time Complexity: 

*** QuickLaTeX cannot compile formula:
 

*** Error message:
Error: Nothing to show, formula is empty

Space Complexity: 

*** QuickLaTeX cannot compile formula:
 

*** Error message:
Error: Nothing to show, formula is empty

If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!