
let arr = [6,5,3,1]
for (let outerLoopPosition = 1; outerLoopPosition < arr.length; outerLoopPosition++) {
let outerLoopVal = arr[outerLoopPosition];
let comparePosition = outerLoopPosition - 1;
let compareVal = arr[comparePosition]
// 1 current arr [ 6, 5, 3, 1 ]
// 1 outerLoopPosition 1 outerLoopVal 5
// 1 comparePosition 0 compareVal 6
// 2 current arr [ 5, 6, 3, 1 ]
// 2 outerLoopPosition 2 outerLoopVal 3
// 2 comparePosition 1 compareVal 6
// 3 current arr [ 3, 5, 6, 1 ]
// 3 outerLoopPosition 3 outerLoopVal 1
// 3 comparePosition 2 compareVal 6
while (comparePosition > -1 && outerLoopVal < compareVal) {
// 1 comparePosition 0 is greater than -1 and outerLoopVal 5 is less than 6
// 1 move comparePosition 0 with compareVal 6 to position 1
// 1 new arr [ 6, 6, 3, 1 ]
// 2 comparePosition 1 is greater than -1 and outerLoopVal 3 is less than 6
// 2 move comparePosition 1 with compareVal 6 to position 2
// 2 new arr [ 5, 6, 6, 1 ]
// 2 comparePosition 0 is greater than -1 and outerLoopVal 3 is less than 5
// 2 move comparePosition 0 with compareVal 5 to position 1
// 2 new arr [ 5, 5, 6, 1 ]
// 3 comparePosition 2 is greater than -1 and outerLoopVal 1 is less than 6
// 3 move comparePosition 2 with compareVal 6 to position 3
// 3 new arr [ 3, 5, 6, 6 ]
// 3 comparePosition 1 is greater than -1 and outerLoopVal 1 is less than 5
// 3 move comparePosition 1 with compareVal 5 to position 2
// 3 new arr [ 3, 5, 5, 6 ]
// 3 comparePosition 0 is greater than -1 and outerLoopVal 1 is less than 3
// 3 move comparePosition 0 with compareVal 3 to position 1
// 3 new arr [ 3, 3, 5, 6 ]
arr[comparePosition + 1] = arr[comparePosition];
comparePosition--;
compareVal = arr[comparePosition]
}
// 1 outer loop pre-final arr [ 6, 6, 3, 1 ]
// 2 outer loop pre-final arr [ 5, 5, 6, 1 ]
// 3 outer loop pre-final arr [ 3, 3, 5, 6 ]
arr[comparePosition + 1] = outerLoopVal
// 1 set outerLoopVal 5 to (comparePosition + 1) position: 0
// 1 outer loop final arr [ 5, 6, 3, 1 ]
// 2 set outerLoopVal 3 to (comparePosition + 1) position: 0
// 2 outer loop final arr [ 3, 5, 6, 1 ]
// 3 set outerLoopVal 1 to (comparePosition + 1) position: 0
// 3 outer loop final arr [ 1, 3, 5, 6 ]
}
// final [ 1, 3, 5, 6 ]