Insertion sort is an elementary sorting algorithm. It has a time complexity of Θ(
n2), thus being slower than heapsort, merge sort and also shellsort. Insertion sort is well suited for sorting small data sets or for the insertion of new elements into a sorted sequence.
Suppose A is an array of N Integer values. We want to sort A
in ascending order, that is, so A(1) is smallest and A(N) is
largest.
Insertion Sort is an algorithm to do this as follows: We have the
top part of the array, which is in order, and the bottom part of the
array, which needs more work. We repeatedly look at the top element
in the unsorted part of the array and move it up, a step at a time,
to where it belongs in the sorted part of the array.
We use a Swap subroutine which switches the values of two array elements.
Of course, instead of using subroutines, we could easily write all the
code we need in the main program.
It is easy to modify this to put the values in descending order
nstead, so A(1) is largest and A(N) is smallest.
Example
Suppose A is an array of 10 Integer values and the initial values in A are:
67 33 21 4 84 49 15 55 75 6
Pass 1: We insert 33 into the sorted part of the array, which at the
moment is just 67.
As 33 < 67, we swap them:
33 67 21 4 84 49 15 55 75 6
\------/ \------------------------------------------------/
sorted part unsorted part of the array
Pass 2: We insert 21 into the sorted part of the array.
As 21 < 67, we swap them:
33 21 67 4 84 49 15 55 75 6
As 21 < 33, we swap them:
21 33 67 4 84 49 15 55 75 6
\------------/ \------------------------------------/
sorted part unsorted part of the array
Pass 3: We insert 4 into the sorted part of the array.
As 4 < 67, we swap them:
21 33 4 67 84 49 15 55 75 6
As 4 < 33, we swap them:
21 4 33 67 84 49 15 55 75 6
As 4 < 21, we swap them:
4 21 33 67 84 49 15 55 75 6
\------------------/ \------------------------------/
sorted part unsorted part of the array
Pass 4: We insert 84 into the sorted part of the array.
As 84 > 67, we do not swap them and we exit the loop.
4 21 33 67 84 49 15 55 75 6
\------------------------/ \------------------------/
sorted part of the array unsorted part of the array
Pass 5: We insert 49 into the sorted part of the array.
As 49 < 84, we swap them:
4 21 33 67 49 84 15 55 75 6
As 49 < 67, we swap them:
4 21 33 49 67 84 15 55 75 6
As 49 > 33, we do not swap them and we exit the loop.
4 21 33 49 67 84 15 55 75 6
\------------------------------/ \------------------/
sorted part of the array unsorted part
Pass 6: We insert 15 into the sorted part of the array.
As 15 < 84, we swap them:
4 21 33 49 67 15 84 55 75 6
As 15 < 67, we swap them:
4 21 33 49 15 67 84 55 75 6
As 15 < 49, we swap them:
4 21 33 15 49 67 84 55 75 6
As 15 < 33, we swap them:
4 21 15 33 49 67 84 55 75 6
As 15 < 21, we swap them:
4 15 21 33 49 67 84 55 75 6
As 15 > 4, we do not swap them and we exit the loop (for two reasons).
4 15 21 33 49 67 84 55 75 6
\------------------------------------/ \------------/
sorted part of the array unsorted part
Pass 7: We insert 55 into the sorted part of the array.
As 55 < 84, we swap them:
4 15 21 33 49 67 55 84 75 6
As 55 < 67, we swap them:
4 15 21 33 49 55 67 84 75 6
As 55 > 49, we do not swap them and we exit the loop.
4 15 21 33 49 55 67 84 75 6
\------------------------------------------/ \------/
sorted part of the array unsorted
Pass 8: We insert 75 into the sorted part of the array.
As 75 < 84, we swap them:
4 15 21 33 49 55 67 75 84 6
As 75 > 67, we do not swap them and we exit the loop.
4 15 21 33 49 55 67 75 84 6
\------------------------------------------------/ \------/
sorted part of the array sorted
Pass 9: We insert 6 into the sorted part of the array.
As 6 < 84, we swap them:
4 15 21 33 49 55 67 75 6 84
As 6 < 75, we swap them:
4 15 21 33 49 55 67 6 75 84
As 6 < 67, we swap them:
4 15 21 33 49 55 6 67 75 84
As 6 < 55, we swap them:
4 15 21 33 49 6 55 67 75 84
As 6 < 49, we swap them:
4 15 21 33 6 49 55 67 75 84
As 6 < 33, we swap them:
4 15 21 6 33 49 55 67 75 84
As 6 < 21, we swap them:
4 15 6 21 33 49 55 67 75 84
As 6 < 15, we swap them:
4 6 15 21 33 49 55 67 75 84
As 6 > 4, we do no swap them and we exit the loop (for two reasons).
4 6 15 21 33 49 55 67 75 84
At this point we are done.
In the process, we have done 35 comparisons and 25 swaps. For an
array of 10 elements, Insertion Sort may do anywhere from 9 to 45
comparisons and anywhere from 0 to 45 swaps.
Source Code:
#include<stdio.h>
#include<conio.h>
int main()
{
int a[10],n,k,i,j,temp;
a[10]={9,7,6,15,16,5,10,11};
for(k=1;k<=n-1;k++)
{
temp=a[k];
j=k-1;
while(temp<a[j]&&j>=0)
{
a[j+1]=a[j];
j=j-1;
}
a[j+1]=temp;
}
printf("Elements of array after sorting are :");
for(i=0;i<=n-1;i++)
{
printf("%2d",a[i]);
}
getch();
}