前端孵化日记(十二) 用🎴扑克牌来理解插入排序

198 阅读1分钟

基本思想

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


代码&分析

将插入排序转化为玩扑克牌的过程会简化理解,代码和注释如下

<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>

执行结果如下: