Sort an array when two halves are sorted

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
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++
Java
Python3
C#
PHP
Javascript
// 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 codeint 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 program to Merge two sorted halves of// array Into Single Sorted Arrayimport 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 .
# 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 Codeif __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# program to Merge two sorted halves of// array Into Single Sorted Arrayusing 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 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 Arrayfor ($i = 0; $i < $n; $i++)    echo $A[$i] . " "; // This code is contributed// by Akanksha Rai?>
<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 codevar A = [ 2, 3, 8, -1, 7, 10 ];var n = A.length;mergeTwoHalf(A, n); // Print sorted Arrayfor (var i = 0; i < n; i++)    document.write( A[i] + " "); // This code is contributed by itsok.</script>
-1 2 3 7 8 10 
Time Complexity: 
*** QuickLaTeX cannot compile formula:
 

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

best & average case, 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++
Java
Python3
C#
Javascript
// 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 arrayvoid 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 codeint 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 program to Merge Two Sorted Halves Of// Array Into Single Sorted Arrayimport 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 program to Merge Two Sorted Halves Of# Array Into Single Sorted Array # Merge two sorted halves of Array into single# sorted arraydef 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 codeA = [ 2, 3, 8, -1, 7, 10 ]n = len(A) mergeTwoHalf(A, n) # Print sorted Arrayprint(*A, sep = ' ') # This code is contributed by avanitrachhadiya2155
// C# program to Merge Two Sorted Halves Of// Array Into Single Sorted Arrayusing 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 .
<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>
-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.
vt_m
29AjayKumar
Akanksha_Rai
Es
jelodar
parascoding
divyeshrabadiya07
divyesh072019
avanitrachhadiya2155
splevel62
mukesh07
itsok
surindertarika1234
rub1cks
amartyaghoshgfg
hardikkoriintern
Merge Sort
Arrays
Sorting
Arrays
Sorting
Merge Sort
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Multidimensional Arrays in Java
Introduction to Arrays
K'th Smallest/Largest Element in Unsorted Array | Set 1
Subset Sum Problem | DP-25
Python | Using 2D arrays/lists the right way
Merge Sort
Bubble Sort Algorithm
QuickSort
Insertion Sort
Selection Sort Algorithm