Monday, June 30, 2014

Insertion Sort

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();
}

1 comment:

  1. #include
    #include
    using namespace std;

    int main()
    {
    int a[6]={6,3,2,1,5,4},i,j,temp=0,k;

    for(i=0;i<6;i++)
    {
    while(i>0 && ja[i])
    {
    temp=a[j];
    a[j]=a[i];
    a[i]=temp;
    }
    j++;
    }
    j=0;
    }

    for(i=0;i<6;i++)
    {
    cout<<a[i]<<endl;
    }
    return 0;
    }

    ReplyDelete