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;