Insertion sort
Introduction:
This is a comparison based sort where we insert ith element into the sorted subarry a[0 .. i-1] at the correct place such that a[0 i] is sorted.
Problem Statement:
Sort an array of n integers
Algorithm
1. In this we kind of assume that subarry a[0 .. i-1] is sorted and insert a[i] in the array at correct place.
2. We run step on input array from i = 0 to n .
Pseudo code :
insertion_sort(a[], n): i = 1 while i < n: // sort a[0.. i] i.e., place a[i] in correct place temp = a[i] j = i-1 while j >= 0 and a[j] > temp : a[j+1] = a[j] j-- a[j+1] = temp // correct position i++
Code :
#include <bits/stdc++.h> using namespace std; void insertion_sort(int a[], int n) { int i = 1; // single element array is sorted (base case) while (i < n) { int temp = a[i]; int j = i - 1; while (j >= 0 && a[j] > temp) // finding correct index to place this element { a[j + 1] = a[j]; j--; } a[j + 1] = temp; // place it i++; } } int main() { int n; cout << "Enter n: "; cin >> n; int a[n]; for (int i = 0; i < n; i++) { cin >> a[i]; } insertion_sort(a, n); for (int i = 0; i < n; i++) { cout << a[i] << " "; } printf("\n"); }
Complexity Analysis :
The complexity is \(O(n^2)\) since code has to run maximum n times with each time O(n) complexity for inserting element at correct place in sorted array
best case is \(O(n)\)