Recursive Insertion Sort
Last Updated :
13 Sep, 2023
Improve
Insertion sort is a simple sorting algorithm that works the way we sort playing cards in our hands.
Below is an iterative algorithm for insertion sort
Algorithm
// Sort an arr[] of size n insertionSort(arr, n) Loop from i = 1 to n-1. a) Pick element arr[i] and insert it into sorted sequence arr[0..i-1]
Example:
Refer Insertion Sort for more details.
How to implement it recursively?
Recursive Insertion Sort has no performance/implementation advantages, but can be a good question to check one’s understanding of Insertion Sort and recursion.
If we take a closer look at Insertion Sort algorithm, we keep processed elements sorted and insert new elements one by one in the sorted array.
Recursion Idea.
- Base Case: If array size is 1 or smaller, return.
- Recursively sort first n-1 elements.
- Insert last element at its correct position in sorted array.
Below is implementation of above idea.
C++
// Recursive C++ program for insertion sort #include <iostream> using namespace std; // Recursive function to sort an array using // insertion sort void insertionSortRecursive( int arr[], int n) { // Base case if (n <= 1) return ; // Sort first n-1 elements insertionSortRecursive( arr, n-1 ); // Insert last element at its correct position // in sorted array. int last = arr[n-1]; int j = n-2; /* Move elements of arr[0..i-1], that are greater than key, to one position ahead of their current position */ while (j >= 0 && arr[j] > last) { arr[j+1] = arr[j]; j--; } arr[j+1] = last; } // A utility function to print an array of size n void printArray( int arr[], int n) { for ( int i=0; i < n; i++) cout << arr[i] << " " ; } /* Driver program to test insertion sort */ int main() { int arr[] = {12, 11, 13, 5, 6}; int n = sizeof (arr)/ sizeof (arr[0]); insertionSortRecursive(arr, n); printArray(arr, n); return 0; } |
C
#include <stdio.h> // Recursive function to sort an array using // insertion sort void insertionSortRecursive( int arr[], int n) { // Base case if (n <= 1) return ; // Sort first n-1 elements insertionSortRecursive(arr, n - 1); // Insert last element at its correct position // in sorted array. int last = arr[n - 1]; int j = n - 2; /* Move elements of arr[0..i-1], that are greater than key, to one position ahead of their current position */ while (j >= 0 && arr[j] > last) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = last; } // A utility function to print an array of size n void printArray( int arr[], int size) { int i; for (i = 0; i < size; i++) printf ( "%d " , arr[i]); printf ( "\n" ); } /* Driver program to test insertion sort */ int main() { int arr[] = { 12, 11, 13, 5, 6 }; int n = sizeof (arr) / sizeof (arr[0]); insertionSortRecursive(arr, n); printArray(arr, n); return 0; } // This code is contributed by pariveshsrivastava1093 |
Java
// Recursive Java program for insertion sort import java.util.Arrays; public class GFG { // Recursive function to sort an array using // insertion sort static void insertionSortRecursive( int arr[], int n) { // Base case if (n <= 1 ) return ; // Sort first n-1 elements insertionSortRecursive( arr, n- 1 ); // Insert last element at its correct position // in sorted array. int last = arr[n- 1 ]; int j = n- 2 ; /* Move elements of arr[0..i-1], that are greater than key, to one position ahead of their current position */ while (j >= 0 && arr[j] > last) { arr[j+ 1 ] = arr[j]; j--; } arr[j+ 1 ] = last; } // Driver Method public static void main(String[] args) { int arr[] = { 12 , 11 , 13 , 5 , 6 }; insertionSortRecursive(arr, arr.length); System.out.println(Arrays.toString(arr)); } } |
Python3
# Recursive Python program for insertion sort # Recursive function to sort an array using insertion sort def insertionSortRecursive(arr,n): # base case if n< = 1 : return # Sort first n-1 elements insertionSortRecursive(arr,n - 1 ) '''Insert last element at its correct position in sorted array.''' last = arr[n - 1 ] j = n - 2 # Move elements of arr[0..i-1], that are # greater than key, to one position ahead # of their current position while (j> = 0 and arr[j]>last): arr[j + 1 ] = arr[j] j = j - 1 arr[j + 1 ] = last # A utility function to print an array of size n def printArray(arr,n): for i in range (n): print (arr[i],end = " " ) # Driver program to test insertion sort arr = [ 12 , 11 , 13 , 5 , 6 ] n = len (arr) insertionSortRecursive(arr, n) printArray(arr, n) # Contributed by Harsh Valecha |
C#
// Recursive C# program // for insertion sort using System; class GFG { // Recursive function to sort // an array using insertion sort static void insertionSortRecursive( int []arr, int n) { // Base case if (n <= 1) return ; // Sort first n-1 elements insertionSortRecursive(arr, n - 1); // Insert last element at // its correct position // in sorted array. int last = arr[n - 1]; int j = n - 2; /* Move elements of arr[0..i-1], that are greater than key, to one position ahead of their current position */ while (j >= 0 && arr[j] > last) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = last; } //Driver Code static void Main() { int []arr = {12, 11, 13, 5, 6}; insertionSortRecursive(arr, arr.Length); for ( int i = 0; i < arr.Length; i++) Console.Write(arr[i] + " " ); } } // This code is contributed by Sam007 |
PHP
<?php // Recursive PHP program for insertion sort // Recursive function to sort an // array using insertion sort function insertionSortRecursive(& $arr , $n ) { // Base case if ( $n <= 1) return ; // Sort first n-1 elements insertionSortRecursive( $arr , $n - 1); // Insert last element at its correct // position in sorted array. $last = $arr [ $n - 1]; $j = $n - 2; // Move elements of arr[0..i-1], that are // greater than key, to one position ahead // of their current position while ( $j >= 0 && $arr [ $j ] > $last ) { $arr [ $j + 1] = $arr [ $j ]; $j --; } $arr [ $j + 1] = $last ; } // A utility function to // print an array of size n function printArray(& $arr , $n ) { for ( $i = 0; $i < $n ; $i ++) echo $arr [ $i ]. " " ; } // Driver Code $arr = array (12, 11, 13, 5, 6); $n = sizeof( $arr ); insertionSortRecursive( $arr , $n ); printArray( $arr , $n ); // This code is contributed by ChitraNayal. ?> |
Javascript
<script> // Recursive Javascript program for // insertion sort // Recursive function to sort an //array using insertion sort function insertionSortRecursive(arr,n) { // Base case if (n <= 1) return ; // Sort first n-1 elements insertionSortRecursive( arr, n-1 ); // Insert last element at its // correct position in sorted array. let last = arr[n-1]; let j = n-2; /* Move elements of arr[0..i-1], that are greater than key, to one position ahead of their current position */ while (j >= 0 && arr[j] > last) { arr[j+1] = arr[j]; j--; } arr[j+1] = last; } // Driver Method let arr=[12, 11, 13, 5, 6]; insertionSortRecursive(arr, arr.length); for (let i=0;i<arr.length;i++) { document.write(arr[i]+ " " ); } // This code is contributed by rag2127 </script> |
Output :
5 6 11 12 13
Time Complexity: O(n2)
Auxiliary Space: O(n)
https://www.youtube.com/watch?v=wObxd4Kx8sE
about the topic discussed above