 # Insertion Sort in Python Programming

###### Sorting in Python

In this lesson, we will understand what is Insertion Sort in Python Programming along with some examples.

## What is Insertion Sort in Python?

An Insertion Sort is a sorting technique used in python to sort elements of sequences like arrays and lists in ascending or descending order.

In this sorting technique, we assume that the first number in the list is in the sorted section and the rest of all the other numbers in the list are in the unordered section. Now we will pick each number from the unsorted section and insert that number at a proper position in the sorted section by shifting the numbers towards the right.

To clearly understand the insertion sorting technique, let's go through its algorithm step by step with an example. ## Insertion Sort Visualization

Suppose we have seven numbers stored in a list as shown below.  First, select the number 9 from the unsorted section of the list and find its proper position in the sorted section of the list. The proper position of 9 is at index 0. So, we have to shift the numbers from the sorted section of the list towards the right to insert 9 at it proper position. Now, select the number 37 from the unsorted section of the list and find its proper position in the sorted section of the list. We can see that the number is already at it proper position. So leave it. Now, select the number 86 from the unsorted section of the list and find its proper position in the sorted section of the list. We can see that the number is already at it proper position. So leave it. Now, select the number 2 from the unsorted section of the list and find its proper position in the sorted section of the list. The proper position of 2 is at index 0. So, we have to shift the numbers from the sorted section of the list towards the right to insert 2 at it proper position. Now, select the number 17 from the unsorted section of the list and find its proper position in the sorted section of the list. The proper position of 17 is at index 3. So, we have to shift the numbers from the sorted section of the list towards the right to insert 17 at it proper position. Now, select the number 5 from the unsorted section of the list and find its proper position in the sorted section of the list. The proper position of 5 is at index 1. So, we have to shift the numbers from the sorted section of the list towards the right to insert 5 at it proper position. So we can see that the entire list has sorted in ascending order.

## Algorithm for Insertion Sort

An algorithm is the steps used to implement the insertion sort in a python program.

Assume we have N numbers stored in a list. To implement the insertion sort on N numbers, the steps are as follows.

• Define a list to store N numbers for insertion sort. Suppose we have defined a list with the name num.
• Run an outer loop i from 1 to N to repeat the process of insertion sort.
• Store the number num[i] to be inserted at proper place in variable x.
• Run an inner while loop j inside the body of the outer loop i for insertion sort from i-1 to 0.
• Now check if the value of x is less than value of num[j] then shift the number num[j] towards right else break the inner loop j.
• Outside the body of inner loop j insert the value of x at num[j+1] position.
• Now print the sorted list on the screen outside the body of the outer loop i.

## Python Program for Insertion Sort

A Python program to sort a list of numbers in ascending order using the insertion sort technique.

#### Insertion Sort (List of Numbers in Ascending Order)

``````# define a list
num=[12,9,37,86,2,17,5]

print('List before Insertion Sort')
for n in num:
print(n,end=' ')

# run an outer loop i from 1 to len(num) to repeat the process of insertion sort
for i in range(1,len(num)):

# x to be inserted at proper place
x=num[i]

# run an inner while loop j for insertion sort from i-1 to 0
j=i-1
while j>=0:

# now check if the value of x is less than num[j] then shift the number num[j] towards right else break the inner loop j
if x<num[j]:
num[j+1]=num[j]
else:
break
j=j-1

# outside the body of inner loop j insert the value of x at num[j+1] position
num[j+1]=x

# print the sorted list
print('\n\nList after Insertion Sort')
for n in num:
print(n,end=' ')``````

#### Output

```List before Insertion Sort
12 9 37 86 2 17 5

List after Insertion Sort
2 5 9 12 17 37 86```

A Python program to sort a list of numbers in descending order using the insertion sort technique.

#### Insertion Sort (List of Numbers in Descending Order)

``````# define a list
num=[12,9,37,86,2,17,5]

print('List before Insertion Sort')
for n in num:
print(n,end=' ')

# run an outer loop i from 1 to len(num) to repeat the process of insertion sort
for i in range(1,len(num)):

# x to be inserted at proper place
x=num[i]

# run an inner while loop j for insertion sort from i-1 to 0
j=i-1
while j>=0:

# now check if the value of x is greater than num[j] then shift the number num[j] towards right else break the inner loop j
if x>num[j]:
num[j+1]=num[j]
else:
break
j=j-1

# outside the body of inner loop j insert the value of x at num[j+1] position
num[j+1]=x

# print the sorted list
print('\n\nList after Insertion Sort')
for n in num:
print(n,end=' ')``````

#### Output

```List before Insertion Sort
12 9 37 86 2 17 5

List after Insertion Sort
86 37 17 12 9 5 2```

A Python program to sort a list of strings in ascending order using the insertion sort technique.

#### Insertion Sort (List of Strings in Ascending Order)

``````# define a list
num=['Squirrel','Dog','Panda','Lion','Bear','Tiger','Rabbit']

print('List before Insertion Sort')
for n in num:
print(n,end='  ')

# run an outer loop i from 1 to len(num) to repeat the process of insertion sort
for i in range(1,len(num)):

# x to be inserted at proper place
x=num[i]

# run an inner while loop j for insertion sort from i-1 to 0
j=i-1
while j>=0:

# now check if the value of x is less than num[j] then shift the string num[j] towards right else break the inner loop j
if x<num[j]:
num[j+1]=num[j]
else:
break
j=j-1

# outside the body of inner loop j insert the value of x at num[j+1] position
num[j+1]=x

# print the sorted list
print('\n\nList after Insertion Sort')
for n in num:
print(n,end='  ')``````

#### Output

```List before Insertion Sort
Squirrel  Dog  Panda  Lion  Bear  Tiger  Rabbit

List after Insertion Sort
Bear  Dog  Lion  Panda  Rabbit  Squirrel  Tiger```

## Insertion Sort Program Explanation

The explanation of the above program (List of Numbers in Ascending Order) is given below in details.

#### Explanation

```Array before Insertion Sort
12 9 37 86 2 17 5

The outer loop i starts running from 1 to 6

When i = 1
x = 9

The inner while loop j starts running from 0 to 0

When j = 0   Check if 9<12      Yes 9<12 then shift the number 12 towards right
Array is : 12 12 37 86 2 17 5

The inner loop ends. Now insert the value of x=9 at position 0
Array is : 9 12 37 86 2 17 5

When i = 2
x = 37

The inner while loop j starts running from 1 to 0

When j = 1   Check if 37<12     No then break the inner loop j

The inner loop ends. Now insert the value of x=37 at position 2
Array is : 9 12 37 86 2 17 5

When i = 3
x = 86

The inner while loop j starts running from 2 to 0

When j = 2   Check if 86<37     No then break the inner loop j

The inner loop ends. Now insert the value of x=86 at position 3
Array is : 9 12 37 86 2 17 5

When i = 4
x = 2

The inner while loop j starts running from 3 to 0

When j = 3   Check if 2<86      Yes 2<86 then shift the number 86 towards right
Array is : 9 12 37 86 86 17 5

When j = 2   Check if 2<37      Yes 2<37 then shift the number 37 towards right
Array is : 9 12 37 37 86 17 5

When j = 1   Check if 2<12      Yes 2<12 then shift the number 12 towards right
Array is : 9 12 12 37 86 17 5

When j = 0   Check if 2<9      Yes 2<9 then shift the number 9 towards right
Array is : 9 9 12 37 86 17 5

The inner loop ends. Now insert the value of x=2 at position 0
Array is : 2 9 12 37 86 17 5

When i = 5
x = 17

The inner while loop j starts running from 4 to 0

When j = 4   Check if 17<86      Yes 17<86 then shift the number 86 towards right
Array is : 2 9 12 37 86 86 5

When j = 3   Check if 17<37      Yes 17<37 then shift the number 37 towards right
Array is : 2 9 12 37 37 86 5

When j = 2   Check if 17<12     No then break the inner loop j

The inner loop ends. Now insert the value of x=17 at position 3
Array is : 2 9 12 17 37 86 5

When i = 6
x = 5

The inner while loop j starts running from 5 to 0

When j = 5   Check if 5<86      Yes 5<86 then shift the number 86 towards right
Array is : 2 9 12 17 37 86 86

When j = 4   Check if 5<37      Yes 5<37 then shift the number 37 towards right
Array is : 2 9 12 17 37 37 86

When j = 3   Check if 5<17      Yes 5<17 then shift the number 17 towards right
Array is : 2 9 12 17 17 37 86

When j = 2   Check if 5<12      Yes 5<12 then shift the number 12 towards right
Array is : 2 9 12 12 17 37 86

When j = 1   Check if 5<9      Yes 5<9 then shift the number 9 towards right
Array is : 2 9 9 12 17 37 86

When j = 0   Check if 5<2     No then break the inner loop j

The inner loop ends. Now insert the value of x=5 at position 1
Array is : 2 5 9 12 17 37 86

The outer loop ends

Array after Insertion Sort
2 5 9 12 17 37 86```