【算法】插入排序
插入排序实现思路:将一个新的数,和前面的比较,只要当前数小于前一个则和前一个交换位置,否则终止;
「时间复杂度:O(N^2);」
「空间复杂度:O(1)」
一、标准方式
function insertSort(arr) {// 检查输入是否为数组且不为空if (!Array.isArray(arr) || arr.length <= 0) {return [];}// 定义交换函数const swap = (arr, i, j) => {const temp = arr[i];arr[i] = arr[j];arr[j] = temp;};// 插入排序for (let i = 1; i < arr.length; i++) {for (let j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {swap(arr, j, j + 1);}}return arr;
}
插入排序的实现原理是将一个数组分为已排序区间和未排序区间,每次从未排序区间中取出一个元素,将其插入到已排序区间中的合适位置,直到未排序区间为空。具体实现过程如下:
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2~5
插入排序的优点是实现简单,代码量小,适用于小规模数据的排序。缺点是时间复杂度为O(n^2),不适用于大规模数据的排序。
二、另一种实现方式
function insertSort(arr) {for (let i = 1; i < arr.length; i++) { // 从第二个元素开始遍历let j = i - 1; // 定义一个指针,指向当前元素的前一个元素const temp = arr[i]; // 将当前元素存储到temp中while (j >= 0 && arr[j] > temp) { // 如果指针没有越界并且前一个元素大于当前元素arr[j + 1] = arr[j]; // 将前一个元素向右移动一位j--; // 指针向左移动一位}arr[j + 1] = temp; // 将当前元素插入到正确的位置}return arr; // 返回排序后的数组
}
第一段代码是标准的插入排序实现,它使用一个指针j来指向当前元素的前一个元素,然后将当前元素插入到正确的位置。具体来说,它从第二个元素开始遍历,将当前元素存储到temp中,然后将指针j向左移动,直到指针越界或者前一个元素小于等于当前元素,然后将当前元素插入到j+1的位置。
第二段代码也是插入排序的实现,但是它使用了交换函数来交换元素的位置。具体来说,它从第二个元素开始遍历,然后将当前元素与前一个元素比较,如果前一个元素大于当前元素,就交换它们的位置,直到当前元素插入到正确的位置。
总的来说,这两段代码的实现思路是一样的,都是将当前元素插入到已经排好序的部分中。但是第一段代码使用了一个指针来指向当前元素的前一个元素,然后将当前元素插入到正确的位置,而第二段代码使用了交换函数来交换元素的位置。
三、测试用例
const arr1 = [3, 0, 2, 5, -1, 4, 1];
console.log(insertSort(arr1)); // [-1, 0, 1, 2, 3, 4, 5]const arr2 = [1, 2, 3, 4, 5];
console.log(insertSort(arr2)); // [1, 2, 3, 4, 5]const arr3 = [5, 4, 3, 2, 1];
console.log(insertSort(arr3)); // [1, 2, 3, 4, 5]
相关文章:
【算法】插入排序
插入排序实现思路:将一个新的数,和前面的比较,只要当前数小于前一个则和前一个交换位置,否则终止;「时间复杂度:O(N^2);」「空间复杂度:O(1)」 一、标准方式 function insertSort(a…...
java servlet 期刊在线投稿系统jsp编程sqlserver数据库mvc模式开发计算机网页设计
一、源码特点 java servlet 期刊在线投稿系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统采用serlvetdaobean,系统具有完整的源代码和数据库,系统 主要采用B/S模式开发。 java servlet 期刊在线…...
命名空间和程序集
目录 一、什么是命名空间 1. 命名空间的作用 2. 命名空间跨文件伸展 3.嵌套命名空间 二、using指令 1. using命名空间指令 2. using别名指令 三、程序集的结构 1. 程序集标识符 2.强命名程序集 一、什么是命名空间 1. 命名空间的作用 命名空间是共享命名空间名的一组…...
108、指针进阶
数组名是数组首元素的地址 但是有两个例外: 1、sizeof(数组名) --数组名表示整个数组,计算的是整个数组的大小,单位是 字节 byte。 2、&数组名 --数组名表示整个数组,取出的是整个数组的地址。 二…...
arm平台交叉编译rt-tests
如果要为ARM平台添加libnuma-dev库,需要在x86平台上进行交叉编译,生成ARM平台可用的库文件。具体步骤如下: 1. ARM平台的交叉编译工具链,例如arm-linux-gnueabihf,可以使用以下命令安装: sudo apt-get in…...
Melis4.0[D1s]:5.测试笔记 - 修改显示测试源码
文章目录1.将显示命令参数固化2.disp_mem源码阅读3.Melis子目录Makefile编写本文是下一篇文章Melis4.0[D1s]:6.mango-MQ-R基于Melis移植lvgl 的基础知识。 1.将显示命令参数固化 从上一篇文章《Melis4.0[D1s]:4.测试笔记 - 内嵌的显示命令》知道,只要2个命令就可以…...
yolov7目标检测:基于自定义数据集完成检测、训练、测试
文章目录 前言一、环境与文件准备1.1、环境配置1.2、源码下载1.3、权重文件下载1.4、详解源码中的文件夹与文件1.5、详解配置参数二、检测模型(detect.py)2.1、自定义检测数据准备2.2、配置参数2.2.1、方式一:打开Pycharm,进入Terminal,输入指令开始检测2.2.2、方式二:点…...
托福高频真词List13 // 附托福TPO阅读真题
目录 4.4单词 生词 熟词 4.5真题 4.4单词 生词 🫐damagemutilatev.损害🫐outlyingfarfar from the centeradj.偏远的🫐posterity[pɑːˈsterəti]further generationn.后代🫐🫐premiseassumpti…...
动力节点王鹤SpringBoot3笔记——第八章 文章管理模块
目录 第八章 文章管理模块 8.1 配置文件 8.2 视图文件 8.3 Java代码 第八章 文章管理模块 创建新的Spring Boot项目,综合运用视频中的知识点,做一个文章管理的后台应用。 新的Spring Boot项目Lession20-BlogAdmin。Maven构建工具,包…...
ROS功能包|mav_control_rw(基于MPC的无人机轨迹跟踪控制)---gazebo仿真测试
ROS功能包|mav_control_rw(基于MPC的无人机轨迹跟踪控制)---gazebo仿真测试gazebo仿真测试gazebo仿真测试 启动gazebo并加载无人机模型 $ roslaunch rotors_gazebo mav.launch mav_name:firefly启动 linear mpc 控制器 $ roslaunch mav_linear_mpc ma…...
iOS 内存管理机制与原理
内存分区 内存一般分为五大区:栈区、堆区、常量区、全局区、代码区。如图 1.栈区 是由编译器自动分配并释放的,主要用来存储局部变量、函数的参数等,是一块连续的内存区域,遵循先进后出(FILO)原则。一般在…...
Linux之父:连你自己都懒得解释,那这就是一堆垃圾!
不出意外,Linus又开喷了,这次的激情开麦,源自一部分没有做注释的合并请求:Linux6.3内核收到了一部分合并请求,但这部分合并完全没有注释。 如果你懒得解释为什么存在一个合并,那这个合并从本质上来说就是错…...
二战华为成功上岸,准备了小半年,要个27k应该也算不上很高吧~
先说下我基本情况,本科不是计算机专业,现在是学通信,然后做图像处理,可能面试官看我不是科班出身没有问太多计算机相关的问题,因为第一次找工作,华为的游戏专场又是最早开始的,就投递了…...
全国青少年电子信息智能创新大赛(复赛)python·模拟三卷,含答案解析
目录 一、编程题 答案解析: 文档下载打印: 老子搞不懂了,答案解析,还版权问题,有毛病是不。谁在瞎投诉啊。 全国青少年电子信息智能创新大赛(复赛)python模拟三卷 一、编程题 第一题:描述 输入某学生成绩,若成绩在 85分及以上,输出“A”,若成绩在 60分到 85分之间…...
服务网关选型指南
1、为服务网关选型需要考虑哪些因素? 功能需求:您需要考虑您的服务网关需要提供哪些功能,例如 API 管理、请求转发、负载均衡、安全认证等。您应该选择能够满足您的需求的服务网关。 可扩展性:您的服务网关需要能够扩展以支持未来…...
华为OD机试-查找充电设备组合-2022Q4 A卷-Py/Java/JS
某个充电站,可提供n个充电设备,每个充电设备均有对应的输出功率。任意个充电设备组合的输出功率总和,均构成功率集合P的1个元素。功率集合P的最优元素,表示最接近充电站最大输出功率P_max的元素 输入描述 输入为3行: 第1行为充电设…...
免费好用的oa系统有哪些?盘点这几款!
免费好用的oa系统有哪些?盘点这几款! 办公自动化(OA),英文Office Automation的缩写。它可以通过特定流程或特定环节与日常事务联系在一起,使公文在流转、审批、发布等方面提高效率,实现办公管理…...
光伏发电系统模拟及其发电预测开源python工具pvlib
1. 太阳辐照量模拟 pysolar是一个用于计算太阳位置和辐照量的Python库。它是基于python语言编写的,可以方便地在各种python项目中使用。pysolar主要用于计算太阳的位置、太阳高度角、太阳方位角、日出和日落时间等信息。这些信息可以用于太阳能电池板和太阳能集热器…...
精彩回顾 | 2023工赋Meetup—上海站
2023工赋Meetup—上海站 2023年4月2日下午,在上海数字长宁体验馆举办的“价值驱动的数字化转型技术专场”Meetup圆满落幕,本次活动由工赋开发者社区主办,上海市工业互联网协会指导,长宁区东虹桥发展办公室和积梦智能联合主办。 …...
[oeasy]python0132_[专业选修]utf-8_unicode_transformation_format_8_编码方式
utf-8 回忆上次内容 上次再次输出了大红心♥ 找到了红心对应的编码黑红梅方都对应有编码 原来的编码叫做 ascii️ \u这种新的编码方式叫unicode包括了 中日韩字符集等 各书写系统的字符集 但是有个问题 拜这个字在字节中应该是b"\x62\xdc"两个字节 该如何理解b&qu…...
Unity VR开发选无线还是有线?Oculus Quest 2串流实战对比与效率工具推荐
Unity VR开发无线与有线串流深度对比:Oculus Quest 2高效开发全指南 当你沉浸在Unity VR开发的世界中,Oculus Quest 2无疑是目前最受欢迎的测试平台之一。但每次修改代码后漫长的打包安装过程,是否让你在无线自由与有线稳定之间反复纠结&…...
明日方舟玩家必备:MAA助手如何帮你自动完成每日任务?
明日方舟玩家必备:MAA助手如何帮你自动完成每日任务? 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: h…...
CANopen设备配置不求人:手把手教你用Python-canopen库读写EDS/DCF文件
CANopen设备配置实战指南:用Python-canopen库深度操作EDS/DCF文件 在工业自动化领域,CANopen协议因其开放性和灵活性成为设备互联的重要标准。而对象字典(Object Dictionary)作为CANopen设备的核心配置数据库,直接决定了设备的通信行为和功能…...
Watchify常见问题解决方案:解决监视失败的7个实用技巧
Watchify常见问题解决方案:解决监视失败的7个实用技巧 【免费下载链接】watchify watch mode for browserify builds 项目地址: https://gitcode.com/gh_mirrors/wa/watchify Watchify作为Browserify的监视模式工具,能在文件变化时自动重新构建&a…...
【信息科学与工程学】【物理/化学科学和工程技术】知识体系 第四十一篇 数据中心基础设施领域中的力学知识 01
编号:001 类别 结构力学 (静力学与动力学) 领域 计算基础设施 / 机房设施 力学模型配方 将服务器机架简化为一个底部固定、顶部自由的悬臂梁模型。在地震激励下,该模型转化为一个单自由度阻尼受迫振动系统。主要考虑水平方向的地震力作用。 数学分析 通过建立运动微分…...
DNS 泄露是什么?为什么网络环境检测时要看 DNS
很多人在检查网络环境时,第一反应通常是看 IP。比如 IP 显示在哪个地区、运营商是谁、是不是数据中心网络。 但实际上,除了 IP 之外,DNS 也是一个很容易被忽略的关键指标。如果 DNS 查询结果和当前网络出口不一致,就可能出现所谓的…...
Arm SVE2向量存储指令ST3Q/ST4Q详解与应用优化
1. SVE2向量存储指令概述在Armv9架构中,SVE2(Scalable Vector Extension 2)作为第二代可扩展向量指令集,引入了多项增强的向量处理能力。其中ST3Q和ST4Q指令是专门为高效存储三路和四路128位宽向量数据而设计的谓词化存储操作。这…...
Linux 进程间通信(IPC)详解:终于搞懂管道、消息队列、共享内存到底在干什么
很多人第一次学 Linux 进程间通信(IPC)时,都会有一种感觉:概念很多 API 很杂 学完还是不知道到底什么时候该用什么最容易出现的问题是:管道和消息队列有什么区别?为什么共享内存最快?信号量到底…...
别再手动发邮件了!用Power Automate为SharePoint列表搭建自动化审批流(保姆级教程)
别再手动发邮件了!用Power Automate为SharePoint列表搭建自动化审批流(保姆级教程) 在快节奏的现代办公环境中,手动处理审批流程已成为效率的隐形杀手。想象一下:员工提交的请假申请需要HR手动转发邮件,采购…...
【免费下载】 青藏高原矢量边界数据下载
青藏高原矢量边界数据下载 【下载地址】青藏高原矢量边界数据下载 青藏高原矢量边界数据下载 项目地址: https://gitcode.com/open-source-toolkit/7d915 数据简介 本仓库提供青藏高原的矢量边界数据下载。该数据可在ARCGIS中直接导入并打开,附带坐标系统信…...
