【算法】插入排序
插入排序实现思路:将一个新的数,和前面的比较,只要当前数小于前一个则和前一个交换位置,否则终止;
「时间复杂度: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…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...