基本思想
类似于扑克牌,从前到后抽出数据,将数据和前方的数据不断比较,遇见比自己大的数据就接着往前找,直到找到比自己小的数据,然后插入当前位置。

代码&分析
将插入排序转化为玩扑克牌的过程会简化理解,代码和注释如下
<script>
//插入排序
function inset(num) {
let hand; //
let x; //
for (i = 1; i < num.length; i++) {
//用一个循环来完成抽牌过程,从数组的第二个元素开始,到数组最后一个元素结束
let x = num[i];//要插入的牌
let hand = i-1;//将已排序的牌当做手牌
while (hand >= 0 && x < num[hand]) {
//用一个while循环来进行比较牌的大小
//当还有手牌,即手牌索引不为负数时,且插入的牌小于手牌时,接着进行比较
num[hand + 1] = num[hand];//将手牌中比插入的牌大的向后挪
hand--;//手牌索引减1,用于将前面的手牌接着和插入的牌比较
}
num[hand + 1] = x;
//当跳出循环后,说明找到了合适位置,将之前“hand--”执行的自减操作加1,就是合适位置,
//将插入的牌赋值给当前位置
}
return num;//返回数组
}
let arr = [9, 8, 7, 6, 5, 3, 4, 1, 2, 1];
console.log(inset(arr));
</script>
执行结果如下:
