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

2023-11-01

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],完成插入操作。  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

详细讲解插入排序(JavaScript实现) 的相关文章

随机推荐

  • managed unmanaged

    Enable function level control for compiling functions as managed or unmanaged pragma managed pragma unmanaged pragma man
  • 生日快乐,Bill

    12月15日 是Bill的生日 于是我用Easyx为他做了个生日礼物比较潦草 当然中间的 initgraph 680 420 EW NOCLOSE EW DBLCLKS EW NOMINIMIZE setbkmode TRANSPARENT
  • Springboot的拦截器功能实现:

    1 写拦截器类 代码如下 package com demo config import org springframework web servlet HandlerInterceptor import javax servlet http
  • CSDN 重新开放付费资源的上传了,但要求如下

    csdn上半年关闭了付费资源的上传功能 经过几个月的优化处理 现在又重新 开放了 优化后的上传功能 必须达到一定的级别才能实现 所以并不是向以前一样 都可以上传 虽然网站上已经公布了具体的要求说明 在这里我整理了一下给大家 也就是说 想上传
  • 设置elementUi无限滚动加载时的一些注意点

    1 overflow属性是一定要有的 可以加到父节点或者自身上 否则会报错 2 容器一定要被撑开并触底 这样才会触发v infinite scroll上绑定的方法 3 设置height calc 100vh 72px 72是header的高
  • [开发

    Java中比较两个对象的指定属性的值是否相等 可以使用Apache Commons Lang库中的EqualsBuilder类 EqualsBuilder提供了一种便捷的方法来比较两个对象的属性值是否相等 具体步骤如下 通过构造器创建一个E
  • 存储过程之用返回多条数据一

    要求 拼接数据 作为多条数据返回 1 创建类型 create or replace type bb ptyxztqk Type as object d index number d name varchar2 100 d this numb
  • 【全志A33】解决文件系统错误

    这个平板第一次开机就给我了一个惊喜 文件系统不可写 WTF 这还玩啥 但是查了一下内核日志 发现这事不简单 内核日志 1 690765 EXT4 fs nandd barriers disabled 1 698331 EXT4 fs nan
  • IMU+摄像头实现无标记运动捕捉

    惯性传感和计算机视觉的进步为在临床和自然环境中获得精准数据带来了新可能 然而在临床应用时需要仔细地将传感器与身体对齐 这减慢了数据收集过程 随着无标记运动捕捉的发展 研究者们提出了一个新的深度学习模型 利用来自视觉 惯性传感器及其噪声数据来
  • Java中printIn如果不能用是怎么回事?

    在Java中 使用 System out printIn 会报错 例 Try java public class Try public static void main String args System out printIn sd 结
  • C语言第十四课-------结构体的认识和使用-------重要一笔

    作者前言 作者介绍 作者id 老秦包你会 简单介绍 喜欢学习C语言和python等编程语言 是一位爱分享的博主 有兴趣的小可爱可以来互讨 个人主页 小小页面 gitee页面 秦大大
  • openwrt 常用命令

    1 进入目录 cd etc twrt 2 打开文件 vi etc twrt config 3 退出文件 ESC gt shift gt wq 3 杀死进程 kill all twrt 转载于 https www cnblogs com pp
  • Docker(一):Docker入门教程

    如今Docker的使用已经非常普遍 特别在一线互联网公司 使用Docker技术可以帮助企业快速水平扩展服务 从而到达弹性部署业务的能力 在云服务概念兴起之后 Docker的使用场景和范围进一步发展 如今在微服务架构越来越流行的情况下 微服务
  • 人工神经网络概念及组成,人工神经网络发展史

    BP神经网络的发展历史 人工神经网络早期的研究工作应追溯至上世纪40年代 下面以时间顺序 以著名的人物或某一方面突出的研究成果为线索 简要介绍人工神经网络的发展历史 1943年 心理学家W Mcculloch和数理逻辑学家W Pitts在分
  • 安装 TensorFlow GPU版(2023年)

    1 安装CUDA与cuDNN 1 1 确定所需的CUDA与cuDNN版本 查看所需的CUDA与cuDNN的版本网址 右上角语言那选English 中文的内容不全 Build from source on Windows TensorFlow
  • 基于单片机的语音风扇的设计与实现

    写在前面 因为偶尔会有人问 所以对之前做的这个小玩意进行一个小小的总结 把资料也放在这里来吧 作品展示 https www bilibili com video BV1iV411C722 spm id from 333 999 0 0 vd
  • xdp测试例子

    牛刀小试 linux内核协议栈实现了一个虚拟机 允许用户程序向内核注入二进制字节码 注入的程序 就可以做一些有趣的事情 比如 负载均衡 数据包检测 加速容器网络转发 做个网损仪 本篇 运行一个测试程序 丢弃网卡收到的icmp包 xdp dr
  • Matlab自带的数据标准化方法(mapminmax和mapstd)详细解析

    转自 http blog sina com cn s blog b3509cfd0101bt9u html Matlab神经网络工具箱自带了两个数据标准化处理命令 一个是mapminmax 另一个是mapstd 下面 分别对这两个命令进行解
  • 目录操作命令

    文章目录 目录操作命令 ls命令 命令格式 常用用法 cd命令 命令格式 常用用法 pwd 命令 命令格式 常用用法 mkdir命令 命令格式 常用用法 rmdir命令 命令格式 常用用法 tree命令 命令格式 常用用法 目录操作命令 l
  • 详细讲解插入排序(JavaScript实现)

    function insertSort alist let preindex current for let i 1 i