JS 插入排序

2023-11-09

算法描述

插入排序的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

  1. 从第一个元素开始,该元素可以认为已经被排序;
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置;
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  5. 将新元素插入到该位置后;
  6. 重复步骤2~5

代码

写法一:

function insertSort(arr) {

    if (!Array.isArray(arr)) {
        return;
    }

    let index = 0;
    let sortedFlag = true;
    for (let i = 1; i < arr.length; i++) {
        index = i;
        for (let j = i - 1; j >= 0; j--) {
            if (arr[index] < arr[j]) {
                let temp = arr[index];
                arr[index] = arr[j];
                arr[j] = temp;

                index = j;
                sortedFlag = false;
            }
        }

        if (sortedFlag) {
            break;
        }
    }
}

写法二:

function insertSort2(arr) {

    if (!Array.isArray(arr)) {
        return;
    }

    var len = arr.length;
    var preIndex, current;
    let sortedFlag = true;
    for (var i = 1; i < len; i++) {
        preIndex = i - 1;
        current = arr[i];
        while (preIndex >= 0 && arr[preIndex] > current) {
            arr[preIndex + 1] = arr[preIndex];
            preIndex--;
            sortedFlag = false;
        }
        arr[preIndex + 1] = current;
        if (sortedFlag) {
            break;
        }
    }
}

时间复杂度和空间复杂度

时间复杂度
最好的情况:O(n)
最坏的情况:O(n^2)
平均:O(n^2)

空间复杂度
O(1),基本是个定值,除了数组本身和临时变量占用内存,并没有额外用到很多内存。

如有错漏,欢迎大佬们拍砖~

关于排序算法的一部分公共的知识点,有的在冒泡排序中提到过。比如设立标志位小优化,复杂度的简要分析等。下面给出直通车

冒泡排序

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

JS 插入排序 的相关文章

  • 为什么 Eclipse 有时会对 JavaScript 中的数组数组发出警告?

    在 Eclipse 中 以下 JavaScript 行 var a1 1 2 3 4 生成警告 Type mismatch cannot convert from Number to any Type mismatch cannot con
  • 将客户端生成的响应作为下载进行流式传输,无需 Service Worker

    假设我有一个在客户端生成的大文件 我希望允许用户将其保存到他们的硬盘驱动器上 通常的方法是创建一个 Blob 然后为其创建一个对象 URL const blob new Blob chunks type application exampl
  • 如何用js获取一个月的4个星期一?

    我正在构建一个图表 其中 x 轴应该是一个月的四个星期 我只想显示该月的四个星期一 我已经有了currentMonth和currentYear变量 而且我知道如何获取该月的第一天 我所需要的只是将一个月的四个星期一放入数组中 所有这些都在同
  • 如何删除事件监听器?

    下面是我的事件监听器代码 window addEventListener beforeunload function e if sessionStorage token abide call api 如果我想删除这个事件监听器 我该怎么办
  • jQuery - 将所有展开的文本包装在 p 标签中

    我遇到以下情况 以下代码被写入我的页面 div Some text here which is not wrapped in tags p Some more text which is fine p p Blah blah another
  • 需要禁用引导时间选择器的输入

    我正在使用 Bootstrap 时间选择器 我已经成功实施了 但我需要的是用户只能在 30 分钟间隙内插入 例如 10 00 10 30 11 00 等 为此我尝试过的是minuteStep如下图所示 效果完美 fantasyleague
  • 如何检测不渲染 .png 透明的浏览器

    我有这段代码可以根据一周中的某一天渲染图像 但在 IE6 及更低版本以及可能其他一些浏览器中 它不会呈现 png 不透明度 所以我想稍微改变一下 这样它就会检测到不渲染 alpha 透明度的浏览器 并告诉他们加载这个图像 img horar
  • 通过 AJAX 发送 XML

    我在 jQuery 中创建了一个 xml 文档 如下所示 var xmlDocument
  • 通过搜索查找下一个文本并突出显示不起作用

    当在搜索框中搜索任何文本时 它可以找到并突出显示正确的文本 但是当搜索下一个 新文本时 它无法找到下一个 新文本 再次搜索时它不起作用 我无法找到问题 这JS below JS button search click function va
  • 使用什么事件来在选择文本框中的值时显示警报消息

    我正在使用 jquery 的自动完成 api 来从数据库中获取名称 但是我想在从显示的文本框中选择名称时显示一条警报消息 我将显示一个图像以便更好地理解 当我输入 S 时 它将显示所有包含 S 的记录 所以问题是 如果我选择例如 Spars
  • 如何在 jQuery 中使用 CSS“background-image”属性添加的图像上绑定单击事件

    这是我的小提琴link http jsbin com otisur 1 edit 我想我的问题通过标题本身就很清楚了 尽管如此 我正在寻找一种绑定的方法click使用 css 添加的图像上的事件background image财产 我知道
  • JavaScript 逻辑赋值是如何工作的?

    在 javascript 中 如果我们有一些代码 例如 var a one var b q a alert b 逻辑 OR 运算符会将 a 的值分配给 b 并且警报将为 一 这仅限于作业还是我们可以在任何地方使用它 似乎空字符串被视为与未定
  • 使用 jQuery 的 javascript 关联数组长度

    我正在使用 javascript 关联数组 例如 var testarray testarray one 1 testarray two 2 testarray three 3 我也在旁边使用jquery 如何使用 jquery 或任何其他
  • 从 url 角度加载模板并在 div 内编译

    由于我是 Angular JS 的新手 我想知道如何加载外部模板并将其与一些数据一起编译到目标中div 例如我有这个模板
  • json、rails、javascript 中的解析错误

    我需要将 ruby 数组放入 javascript 数组中 但出现解析错误 var characters 这就是我将 ruby 嵌入到内联 javascript 中的方式 但它出现了解析错误 我应该如何将此 ruby 数组放入 javasc
  • 未处理的承诺拒绝:Zone.js 检测到 ZoneAwarePromise `(window|global).Promise` 已被覆盖

    我尝试将 Angular2 快速入门代码合并到我当前的 webpack 构建中 似乎有些东西正在覆盖zone js抛出此错误的承诺 根据我见过的大多数 stackoverflow 帖子 zone js文件需要在任何可能包含承诺的文件之后加载
  • Skrollr 添加空白

    我已经尝试了一切 我在谷歌上阅读了 4 5 页试图找到适合我的修复程序 已经筋疲力尽了 即使我使用 skrollr 示例 我的问题仍然存在 不是说他们做错了什么 我知道我只是没有正确理解它 因此 我上传了一个演示 仅在移动设备上展示这个尴尬
  • 在 React JSX 中返回配对元素

    问题 在 React 中 您希望通过映射数组来创建 DOM 结构 但数组中的每个项目应返回 2 个元素 例如 import React from react import from lodash let Component React ex
  • 如何在 ionic2 中 pop() 之后重新加载 ion-page

    我有2页Page1 and Page2 我用过this nav pop 在Page2中 它将弹出Page2 Page1将启用 但我想刷新Page1 先感谢您 您可以将父页面与导航推送一起传递 这样您就可以将父页面作为 navParamter
  • 将一维数组转换为二维数组[重复]

    这个问题在这里已经有答案了 我正在开发一个程序 我必须将文本文件中的值读入一维数组 我已经成功获取该一维数组中的数字 m1 1 2 3 4 5 6 7 8 9 但我希望数组是 m1 1 2 3 4 5 6 7 8 9 您可以使用此代码 co

随机推荐

  • uniapp picker实现选择年月demo效果(整理)

  • win10 64位系统上注册wincc的ocx插件问题

    win10 64位系统上注册wincc的ocx插件问题 今天下载一个anigif动态图控件 注册时死活注册不了 在win10操作系统下注册OCX控件 主要有以下几个步骤 1 以管理员的身份打开命令提示符 2 输入注册命令 回车即可 如reg
  • gitlab ssh key

    gitlab ssh key 查看是否拥有密钥 cd ssh ls 文件内容包含 id dsa 或id rsa命名的文件 其中一个带有 pub扩展名 pub 文件是你的公钥 另一个则是私钥 如果没有或者根本没有 ssh 目录 需要重新生成
  • HRNet-Semantic-Segmentation图像,视频推理

    源码 https github com HRNet HRNet Semantic Segmentation 我用的是pytorchv1 1分支 这么好的项目居然没有inference代码 于是自己整理了一个简单的demo jit和onnx
  • ISO/IEC 27001:2022 发布(中文),信息安全、网络安全和隐私保护 信息安全管理系统 要求

    ISO IEC 27001 2022 发布 中文 信息安全 网络安全和隐私保护 信息安全管理系统 要求 ISOIEC27001 2022中文信息安全 网络安全和隐私保护 数据集文档类资源 CSDN下载ISOIEC27001 2022中文信息
  • 2021年我最喜欢的Java Web报表工具-实现批量+套打入园通知书

    最近龙哥的园子开张了 不少同学加好友要求入园 为满足同学们的需求 特开此篇 用锐浪JAVA WEB报表实现批量 套打 生成打印入园通知书 锐浪JAVA WEB报表官网 我们先看一下今天要实现的效果 龙哥的 入园通知书 注 自已瞎编的通知书
  • LeetCode第529题:扫雷游戏

    让我们一起来玩扫雷游戏 给你一个大小为 m x n 二维字符矩阵 board 表示扫雷游戏的盘面 其中 M 代表一个 未挖出的 地雷 E 代表一个 未挖出的 空方块 B 代表没有相邻 上 下 左 右 和所有4个对角线 地雷的 已挖出的 空白
  • 驱动的调用

    目录 设备文件 编辑 测试驱动 读写回环测试 步骤 源文件 详细的讲解看注释即可 应用和驱动之间的数据交换 在应用层调用open来打开这个系统文件 在向这个设备文件使用read write等即可调用驱动的函数去工作 设备文件 设备文件连接着
  • Sparkstreaming读取kafka数据写入hive和es

    一 主要流程 此demo用到的软件如下 软件需先自行安装 springboot 1 5 9 RELEASE hadoop 2 7 2 spark 2 1 1 elasticsearch 5 2 2 kafka 0 10 2 1 hive s
  • Cron表达式解读

    背景说明 解读0 0 10 与 0 10 的区别 各个字符代表的含义 0代表从0分开始 代表任意字符 代表递增 1 0 0 10 代表从0分钟开始 每10分钟执行任务一次 启动时间 xx 20 05 第一次执行时间 xx 20 10 第二次
  • 项目心得(三)

    赛车游戏项目心得 介绍 确定项目 分工 进度规划 资源结构 游戏数据结构 遇到的问题 项目展示 开始场景 主菜单场景 成就查询场景 诗词系统场景 无尽塔场景 车库场景 阶位场景 视频演示 项目文件 总结 介绍 我带领的第二次小组团队项目 大
  • 1.1 密码学哈希函数

    我们需要理解的第一个密码学的基础知识是密码学哈希函数 哈希函数是一个数学函数 具有以下三个特性 其输入可为任意大小的字符串 它产生固定大小的输出 为使本章讨论更具体 我们假设输出值大小为256位 但是 我们的讨论适用于任意规模的输出 只要其
  • 操作系统虚拟机linux系统内建立的文件为只读,如何可读可写?

    1 先建立文件 按照自己的需求建立文件 2 打开主目录 发现a c文件为只读形式 3 在终端输入chmod 666 a c 4 返回主目录 文件为可读可写形式 5 打开a c文件就可以编辑代码并保存啦
  • llS6 and llS7解析漏洞

    1 什么是llS Internet Information Services 互联网信息服务 是微软公司由微软公司提供的基于运行Microsoft windows的互联网基本服务 web服务 因为IIS是在windows操作系统平台下开发的
  • 2021-10-25尤破金10.25黄金今日行情价格走势分析及黄金原油最新策略解套

    黄金行情走势分析 周一 10月25日 国际金价徘徊在1800美元重要心理关口附近 美元指数反弹限制了金价升势 在美联储主席鲍威尔表示通胀可能持续到明年后 投资人思索美联储可能会如何应对通胀压力 在鲍威尔上周五 10月22日 表示美联储应开始
  • Pytorch分布式训练(一)

    参考文献 Writing Distributed Applications with PyTorch PyTorch Tutorials 2 0 1 cu117 documentation 33 完整讲解PyTorch多GPU分布式训练代码
  • 简单报价单模板_科普:小程序定制和模板开发有什么区别?

    小程序常见的开发方式有三种 自己源代码开发 找外包团队定制开发 使用小程序模板类开发工具 对于不懂技术的小白来说 源代码开发困难太大 那么后两种方式该如何选择呢 它们到底都有什么区别 接下来就跟大家科普一下这些知识 1 成本不同 小程序模板
  • ClickHouse(四)表引擎

    官网 表引擎 ClickHouse文档 表引擎在 ClickHouse 中的作用十分关键 直接决定了数据如何存储和读取 是否支持并发读写 是否支持 index 支持的 query 种类 是否支持主备复制等 1 表引擎概述 ClickHous
  • unity3D之动态的创建球体游戏对象js

    function OnGUI if GUILayout Button 创建立方体 GUILayout Height 50 var objCube GameObject CreatePrimitive PrimitiveType Sphere
  • JS 插入排序

    算法描述 插入排序的算法描述是一种简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中从后向前扫描 找到相应位置并插入 一般来说 插入排序都采用in place在数组上实现 具体算法描述如下 从第一个元素开始