【算法-排序】js插入排序

什么是插入排序?
如果我们现在有一个数组arr,从下标为i = 1开始循环,取出key = arr[i],然后让他与前边的元素逐一对比,只要前边的元素比key大,那么就让前边的元素的下标加1,直到找到一个比key小的元素,把key插入到在上一次修改下标的元素的位置,因为我们从前两个元素开始对比,那么在key前边的总是有序的,此时一轮插入结束,进行下一次循环,i++。
看图:
插入排序
下边就是插入排序的代码,为了看官能够直接执行,我写成了一个html,各位复制到html直接执行就可以,上图也是这个html生成的。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        .list {
            display: flex;
            margin: 20px;
        }
        .list .item {
            width: 50px;
            height: 30px;
            font-size: 16px;
            font-weight: 700;
            text-align: center;
            line-height: 30px;
            border: 2px solid #2992e7;
            border-right: none;
            color: rgb(240, 33, 205);
        }
        .list .item.change_item {
            background-color: rgb(92, 235, 240);
        }
        .list .item.key_item {
            background-color: rgb(221, 230, 140);
        }
        .list .item:nth-last-child(1){
            border-right: 2px solid #2992e7;
        }
    </style>
</head>
<body>
    <script>
        function insertSort(arr){
            for(let i = 1;i < arr.length;i++){
                let key = arr[i]
                let j = i - 1
                while(arr[j] >= 0&&arr[j] > key){
                    arr[j + 1] = arr[j]
                    j--
                }
                arr[j + 1] = key
                renderList(arr,i + 1,j + 1)
            }
            return arr
        }

        let list = [65,6,856,42,2,86,4,9,68,4569]
        renderList(list,1,-1)

        console.log(insertSort(list))

        function renderList(arr,keyIndex,changeIndex){
            let domList = document.createElement("div")
            domList.classList = "list"
            for(let i = 0;i < arr.length;i++){
                let domItem = document.createElement("div")
                domItem.classList = "item"
                if(changeIndex == i){
                    domItem.classList = "item change_item"
                }
                if(keyIndex == i){
                    domItem.classList = "item key_item"
                }
                domItem.innerText = arr[i]
                domList.appendChild(domItem)
            }
            document.body.appendChild(domList)
        }
    </script>
</body>
</html>

觉得有帮助的话,请关注一下,点个赞呗!!!
上一篇:vue用了keep-alive生命周期只执行一次怎么办?
下一篇:js归并排序

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值