排序算法---插入排序

1. 基本思想

从待排序列的第二个元素开始,与前面已排序的每个元素进行比较,若大(或小)则交换两元素,直到待排元素到达正确位置为止

下面以摸扑克牌为例,我们希望摸到的牌最终在手中是有序的,假设我们将小牌排在左边,大的牌排在右边

(1)第一次我摸到的数字是5, 此时手里只有一张牌,不存在先后顺序问题

(2)之后又摸到了一张3,此时与前面的5比较一下,发现3比5小,于是将3和5交换一下位置,手里的牌变成了 [3, 5]

(3)之后又摸了一张4,手里的牌是 [3, 5, 4], 先让4与前面的5比较,发现比5小,于是交换,变成[3, 4, 5], 再让4与3比较,发现不比3大,不需要交换

(4)继续摸牌,摸到的是4, 手中的牌变成了[3, 4, 5, 4], 先让4与前面的5进行比较,5大于4需要交换,变成了[3, 4, 4, 5], 4再与前面的4进行比较,发现不比前面的4大,于是不需要交换

(5)最后摸到一张6,手中的牌变成了[3, 4, 4, 5, 6], 6先于前面的5进行比较,发现比5大,不需要交换。

最终手里的牌是 [3, 4, 4, 5, 6]

 

2. 代码实现

    <script>let arr = [5, 3, 4, 4, 6];let len = arr.length;function InsertSort() {for (let i=0; i<len; i++) {  for (let j=i; j>0; j--) {  // 向前遍历 比较if (arr[j] < arr[j-1]) {let temp = arr[j];arr[j] = arr[j-1];arr[j-1] = temp;}else {break;  // 当前元素不比前一个元素小,直接跳出内层循环}}}console.log(arr)}InsertSort();</script>

 

 

3. 复杂度分析

1. 时间复杂度:找出执行次数最多的语句即可

if (arr[j] < arr[j-1]) {let temp = arr[j];arr[j] = arr[j-1];arr[j-1] = temp;
}

=> 对于第一个元素:需要比较0次

     对于第二个元素:需要比较1次

    ......

    对于第n个元素:需要比较n-1次

=>所以 0+1+2+...+(n-1) = (n^2)/2 - n/2

=> 去掉系数、低阶和常量  

=> 则时间复杂度为  O(n^2)

 2. 空间复杂度: 插入排序中并没有用到额外的空间,所以空间复杂度为 O(1)

3. 插入排序是稳定的排序算法:从上述的摸扑克牌案例中可以看出,有两个4,然而后摸的4仍就排在先摸的4的后面

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/269594.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysqlclient安装失败

错误代码如下: 原因&#xff1a;缺少依赖项 从您所提供的错误日志中可以看出&#xff0c;尝试安装mysqlclient时出现了问题。错误的核心部分是&#xff1a; Can not find valid pkg-config name. Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually 这表…

ubuntu-c++-可执行模块-动态链接库-链接库搜索-基础知识

文章目录 1.动态链接库简介2.动态库搜索路径3.运行时链接及搜索顺序4.查看可运行模块的链接库5.总结 1.动态链接库简介 动态库又叫动态链接库&#xff0c;是程序运行的时候加载的库&#xff0c;当动态链接库正确安装后&#xff0c;所有的程序都可以使用动态库来运行程序。动态…

奥比中光 Femto Bolt相机ROS配置

机械臂手眼标定详解 作者&#xff1a; Herman Ye Auromix 测试环境&#xff1a; Ubuntu20.04/22.04 、ROS1 Noetic/ROS2 Humble、X86 PC/Jetson Orin、Kinect DK/Femto Bolt 更新日期&#xff1a; 2023/12/12 注1&#xff1a; Auromix 是一个机器人爱好者开源组织。 注2&#…

『npm』一条命令快速配置npm淘宝国内镜像

&#x1f4e3;读完这篇文章里你能收获到 一条命令快速切换至淘宝镜像恢复官方镜像 文章目录 一、设置淘宝镜像源二、恢复官方镜像源三、查看当前使用的镜像 一、设置淘宝镜像源 npm config set registry https://registry.npm.taobao.org服务器建议全局设置 sudo npm config…

IO流(一)

目录 一.关于IO流 二.字节流 1.FIleOutputStream&#xff08;字节输出流&#xff09; 1.书写步骤&#xff1a; 1.创建字节输出流对象 2.写数据 3.释放资源 2.书写数据的三种方式 3.换行写入数据&#xff1a; 4.续写 2.FileInputStream&#xff08;字节输入流&#xf…

HTML实现页面

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>工商银行电子汇款单</title> </head> &…

C# WPF上位机开发(日志调试)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 程序开发的过程中&#xff0c;调试肯定是少不了的。比如说&#xff0c;这个时候&#xff0c;我们可以设置断点、查看变量、检查函数调用堆栈等等。…

排序算法-快速排序

1.快速排序&#xff08;递归&#xff09; 快速排序是 Hoare 于 1962 年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a; 任取待排序元素序列中 的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素…

ISP去噪(1)

#灵感# 因为理解的2DNR、3DNR 和当前调试平台标注的2DNR、3DNR 作用有很大差异&#xff0c;所以在网上广撒网&#xff0c;搜集知识。 目前收集出来一个这样的文章&#xff0c;有点像大学生的论文“取其精华&#xff0c;合成糟粕”。------权当一个记录册 目录 运动阈值&…

等保二级和三级的区别

等保二级和三级定级标准有什么区别&#xff1f;定级原则和方法介绍 网络安全等级保护&#xff0c;简称等保&#xff0c;是我国为了保障信息系统的安全运行&#xff0c;防止信息泄露、篡改、破坏等威胁&#xff0c;制定的一套信息安全管理制度。根据《信息安全技术网络安全等级保…

汽车IVI中控开发入门及进阶(十一):ALSA音频

前言 汽车中控也被称为车机、车载多媒体、车载娱乐等,其中音频视频是非常重要的部分,音频比如播放各种格式的音乐文件、播放蓝牙接口的音乐、播放U盘或TF卡中的音频文件,如果有视频文件也可以放出音频,看起来很简单,在windows下音乐播放器很多,直接打开文件就能播放各…

【matlab进阶学习-6】 读取log数据data.txt文件,并做处理,导出报告/表格/图表

原始文件 原始文件格式txt&#xff0c;每一行对应一个数据&#xff0c;数据之间由逗号分割开 对应意思 时刻&#xff0c;电压&#xff0c;电流&#xff0c;功率&#xff0c;容量&#xff0c;&#xff0c;电流&#xff0c;功率&#xff0c;&#xff0c;RTC时间&#xff0c;状态…