详细讲解插入排序(JavaScript实现)

function insertSort(alist){
    let preindex,current;
    for(let i=1;i<alist.length;i++){
        preindex=i-1;
        current=alist[i]
        while(preindex>=0&&alist[preindex]>current){
            alist[preindex+1]=alist[preindex]
            preindex--
        }
        alist[preindex+1]=current
    }
    return alist
}
insertSort([5,9,6,3,4,5])

这段插入排序的JavaScript代码的运行过程如下:

1. 首先,定义了两个变量preIndex和current。preIndex用于保存当前元素的前一个元素的索引,current用于保存当前元素的值。

2. 外层循环for (let i = 1; i < len; i++)用于控制排序的轮数,从第二个元素开始,因为第一个元素默认已经被排序。

3. 在每一轮开始时,将当前的索引i - 1赋值给preIndex,将当前元素的值赋值给current。

4. 内层循环while (preIndex >= 0 && arr[preIndex] > current)用于控制每一轮的比较次数,如果前一个元素的值大于当前元素的值,就将前一个元素后移一位。

5. 在每一轮结束后,将current插入到正确的位置,即preIndex + 1。

6. 最后,返回排序后的数组。

这个过程会重复n-1次(n是数组的长度),在每次循环中,都会将当前元素插入到已排序序列的正确位置,最终得到一个升序的数组。 

一、为什么while循环中preindex要大于等于零

因为在插入排序中,preIndex表示当前元素前一个元素的索引。在while循环中,我们需要比较当前元素和它前面的元素,如果前面的元素大于当前元素,我们就将前面的元素后移一位。

preIndex >= 0这个条件是为了防止数组越界。当我们处理到数组的第一个元素时,preIndex的值为-1,如果我们继续让preIndex减小,那么在访问arr[preIndex]时就会出现数组越界的错误。因此,我们需要在preIndex >= 0的条件下进行循环,以确保我们访问的数组元素是有效的。

二、最后一步是什么意思?

alist[preindex+1]=current这行代码的作用是将current(当前元素)插入到正确的位置。

在插入排序中,我们首先假设第一个元素已经被排序。然后,从第二个元素开始,我们将其与前面已排序的元素进行比较。如果当前元素小于前面的元素,我们就将前面的元素后移一位,然后继续比较,直到找到一个元素不大于当前元素或者已经没有元素可以比较。

此时,preIndex + 1就是当前元素应该插入的位置,因为preIndex是最后一个大于当前元素的元素的索引。所以,我们将当前元素current赋值给alist[preIndex + 1],完成插入操作。  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值