diff --git a/src/algorithms/sorting/insertion-sort/InsertionSort.js b/src/algorithms/sorting/insertion-sort/InsertionSort.js
index 472625480a..110dce10c9 100644
--- a/src/algorithms/sorting/insertion-sort/InsertionSort.js
+++ b/src/algorithms/sorting/insertion-sort/InsertionSort.js
@@ -8,26 +8,28 @@ export default class InsertionSort extends Sort {
     for (let i = 0; i < array.length; i += 1) {
       let currentIndex = i;
 
+      const temp = array[currentIndex];
+
       // Call visiting callback.
       this.callbacks.visitingCallback(array[i]);
 
       // Go and check if previous elements and greater then current one.
       // If this is the case then swap that elements.
       while (
-        array[currentIndex - 1] !== undefined
-        && this.comparator.lessThan(array[currentIndex], array[currentIndex - 1])
+        currentIndex > 0
+        && this.comparator.lessThan(temp, array[currentIndex - 1])
       ) {
         // Call visiting callback.
         this.callbacks.visitingCallback(array[currentIndex - 1]);
 
         // Swap the elements.
-        const tmp = array[currentIndex - 1];
-        array[currentIndex - 1] = array[currentIndex];
-        array[currentIndex] = tmp;
+        array[currentIndex] = array[currentIndex - 1];
 
         // Shift current index left.
         currentIndex -= 1;
       }
+
+      array[currentIndex] = temp;
     }
 
     return array;