Bug in Insertion Sort Code

found a bug in the implementation of the insertion sort algorithm in Chapter 23. The issue arises in the following code snippet:

function insertionSort(input) {
  // Variable to store the current element being compared
  let activeNumber;

  // Loop through the array starting from the second element
  for (let i = 1; i < input.length; i++) {
    // Store the current element in the activeNumber
    activeNumber = input[i];

    // Inner loop to compare activeNumber with the elements before it
    for (let j = i - 1; j >= 0; j--) {
      if (input[j] > activeNumber) {
        // Move the greater element one position ahead for the activeNumber
        input[j + 1] = input[j];
      } else {
        // If we find an element that is smaller than or equal to the activeNumber, exit the inner loop
        break;
      }
    }

    // Place the activeNumber in its correct sorted position
    input[j + 1] = activeNumber;
  }
}

let myinput = [24, 10, 17, 9, 5, 9, 1, 23, 300];
insertionSort(myinput);
alert(myinput);

The bug occurs because the variable j goes out of scope, rendering the insertion sort ineffective. To address this issue, I suggest modifying the code as follows:

// ...

// Loop through the array starting from the second element
for (let i = 1; i < input.length; i++) {
  // Store the current element in the activeNumber
  activeNumber = input[i];
  let j; // Declare j outside the loop to prevent it from going out of scope

  // Inner loop to compare activeNumber with the elements before it
  for (j = i - 1; j >= 0; j--) {
    if (input[j] > activeNumber) {
      // Move the greater element one position ahead for the activeNumber
      input[j + 1] = input[j];
    } else {
      // If we find an element that is smaller than or equal to the activeNumber, exit the inner loop
      break;
    }
  }

  // Place the activeNumber in its correct sorted position
  input[j + 1] = activeNumber;
}

// ...

This modification ensures that the variable j retains its value outside the loop, preventing any scope-related issues.

1 Like

Thanks! I’ve gone ahead and updated the errata thread with this! :slight_smile: