当前位置: 首页 > article >正文

2.3.插入排序——像打牌一样整理数组,为什么它对“几乎有序”数据特别友好?

2.3.插入排序——像打牌一样整理数组为什么它对“几乎有序”数据特别友好系列搜索与排序 | 第 3 篇共 16 篇难度⭐☆☆☆☆ 入门级标签排序插入排序稳定排序基础算法小数据优化上一篇2.2.选择排序——每轮找最小为什么交换更少却反而不稳定下一篇2.4.快速排序——先分区再递归为什么它平均这么快却可能退化前言“插入排序不也是 O(n²) 吗为什么它的口碑往往比冒泡和选择更好”这是很多初学者学到第三个基础排序时都会冒出来的问题。插入排序表面上看也不复杂每次拿一个新元素插到前面已经有序的部分里。但真正往下挖你会发现它有几个很值得讲透的点为什么它像“整理手里的扑克牌”为什么它在最坏情况下还是 O(n²)却对“几乎有序”数据特别友好为什么它是稳定排序为什么很多工程实现会在小区间切换到插入排序它和希尔排序、链表排序之间又有什么联系这篇就把插入排序讲透。一、算法思想维护前缀有序区间插入排序的核心思想很直观把数组看成“前面已经有序、后面还未处理”两部分每一轮从后半部分拿出一个元素把它插入到前半部分的正确位置。假设数组长度为n初始时可以认为第0个元素自己就是一个长度为 1 的有序区间第 1 轮把第1个元素插入到区间[0, 0]中第 2 轮把第2个元素插入到区间[0, 1]中第 3 轮把第3个元素插入到区间[0, 2]中……第n-1轮结束后整个数组有序核心不变量第i轮结束后区间[0, i]已经有序并且保持了这i1个元素在排序后的正确相对顺序。这也是它和前两篇算法的区别冒泡排序不断交换相邻元素把大元素往后“推”选择排序扫描未排序区间把最值“选”出来插入排序把当前元素拿出来插入到前面有序区间的合适位置如果你打过扑克牌这个过程会非常自然手牌左边已经排好序右手新摸到一张牌从右往左找位置给它腾出空位再把它插进去这就是插入排序。二、完整图解过程以数组[5, 3, 8, 1, 2]为例逐步演示插入排序的全过程。第 1 轮把3插入到[5]中初始 [5 | 3, 8, 1, 2] ↑ 左边视为已排序区间 取出 key 3 比较 5 和 35 35 右移一位 腾出位置后把 3 放进去 结果 [3, 5 | 8, 1, 2]第 2 轮把8插入到[3, 5]中当前 [3, 5 | 8, 1, 2] 取出 key 8 比较 5 和 85 8不需要移动 直接放在末尾 结果 [3, 5, 8 | 1, 2]这一步很能体现插入排序的特点如果当前元素本来就比前面的都大那它几乎不用动这也是它在“几乎有序”数据上会很快的原因之一第 3 轮把1插入到[3, 5, 8]中当前 [3, 5, 8 | 1, 2] 取出 key 1 比较 8 和 18 18 右移 比较 5 和 15 15 右移 比较 3 和 13 13 右移 腾出第 0 位后把 1 放进去 结果 [1, 3, 5, 8 | 2]这一轮能看出插入排序的本质它不是不断交换而是先把key暂存起来再把比它大的元素整体向右挪最后一次性落位第 4 轮把2插入到[1, 3, 5, 8]中当前 [1, 3, 5, 8 | 2] 取出 key 2 比较 8 和 28 28 右移 比较 5 和 25 25 右移 比较 3 和 23 23 右移 比较 1 和 21 2停止 把 2 放到 1 后面 结果 [1, 2, 3, 5, 8]最终结果[1, 2, 3, 5, 8]✅整体过程汇总轮次当前 key已排序区间变化结果第 1 轮3[5] - [3, 5][3, 5, 8, 1, 2]第 2 轮8[3, 5] - [3, 5, 8][3, 5, 8, 1, 2]第 3 轮1[3, 5, 8] - [1, 3, 5, 8][1, 3, 5, 8, 2]第 4 轮2[1, 3, 5, 8] - [1, 2, 3, 5, 8][1, 2, 3, 5, 8]三、代码实现Python 版本带注释definsertion_sort(arr):nlen(arr)foriinrange(1,n):keyarr[i]# 当前待插入元素ji-1# 把所有比 key 大的元素向右移动一位whilej0andarr[j]key:arr[j1]arr[j]j-1# 把 key 放到正确位置arr[j1]keyreturnarr arr[5,3,8,1,2]print(insertion_sort(arr))# [1, 2, 3, 5, 8]C 版本#includeiostream#includevectorusingnamespacestd;voidinsertionSort(vectorintarr){intnarr.size();for(inti1;in;i){intkeyarr[i];intji-1;while(j0arr[j]key){arr[j1]arr[j];j--;}arr[j1]key;}}intmain(){vectorintarr{5,3,8,1,2};insertionSort(arr);for(intx:arr){coutx ;}return0;}四、复杂度分析1时间复杂度情况时间复杂度原因最好情况O(n)数组本身有序每轮只需比较一次几乎不用移动最坏情况O(n²)数组完全逆序第i轮可能要移动i个元素平均情况O(n²)平均每轮都要向左寻找插入位置最好情况为什么是O(n)因为如果数组已经有序比如[1, 2, 3, 4, 5]那么每一轮都会发生key取出来与前一个元素比较一次发现不用动直接结束总共只需要做大约n-1次比较所以是O(n)。最坏情况为什么是O(n²)因为如果数组完全逆序比如[5, 4, 3, 2, 1]那么第 1 轮移动 1 次第 2 轮移动 2 次第 3 轮移动 3 次……第n-1轮移动n-1次总操作量约为1 2 3 ... (n-1) n(n-1)/2 O(n²)2空间复杂度指标值原因空间复杂度O(1)只使用了key、j等少量辅助变量是否原地✅不需要额外数组3数据移动特点插入排序最值得记住的一点是它的比较和移动次数不是固定的而是跟数组“离有序还有多远”强相关。这也是它和选择排序最不一样的地方选择排序的比较次数几乎固定插入排序的工作量会随着“逆序程度”变化五、稳定性为什么它是稳定排序先回顾稳定性的定义如果两个相等元素在排序前后的相对顺序不变那么这个排序算法就是稳定的。插入排序是稳定排序。原因就在这句条件判断while(j0arr[j]key)注意这里写的是arr[j] key而不是arr[j] key这意味着只有当前面的元素严格大于key时才会右移如果前面的元素和key相等就不会继续右移于是后出现的相等元素只会被插到前面相等元素的后面六、为什么它对“几乎有序”数据特别友好这是插入排序最有价值的一个性质。如果数组本来就差不多有序那么每一轮插入时key往左移动的距离很短甚至很多轮根本不用移动因而总开销会非常小比如数组[1, 2, 3, 4, 6, 5, 7, 8]这里只有6和5的位置有点不对。插入排序处理到5时把6右移一位再把5放到6前面整个数组就已经有序了。也就是说它没有做很多“无意义的大动作”。一个更本质的理解它和逆序对数量有关设数组中的逆序对数量为k。对于插入排序来说内层while循环每执行一次本质上都在消除一个“当前 key 与前面某个元素”的逆序关系因此可以把插入排序的时间复杂度理解成O(n k)其中n是外层扫描一遍数组的成本k是需要通过移动元素来消除的逆序关系数量这就解释了为什么数据越接近有序插入排序越快在某些近乎有序的小数组里它甚至会比快排、归并这类O(n log n)算法更顺手这也是很多工程实现会在小区间或近乎有序区间里切换到插入排序的原因。七、优化与变体优化 1使用“后移”而不是频繁交换很多初学者第一次写插入排序时会把它写成这样遇到逆序就不断swap交换相邻元素虽然逻辑上也能排出来但这样会产生更多赋值操作。更推荐的标准写法是先把当前元素保存到key把所有比key大的元素统一右移最后一次性把key放到空出来的位置也就是我们前面代码里的这种写法。它的好处是代码逻辑更清楚数据写入次数更少更符合插入排序“腾位置再落位”的本质变体 2二分插入排序插入排序有两个主要成本比较找插入位置移动给key腾位置如果想减少比较次数可以在已经有序的区间里用二分查找定位插入位置。#includevectorusingnamespacestd;voidbinaryInsertionSort(vectorintarr){intnarr.size();for(inti1;in;i){intkeyarr[i];intleft0,righti-1;while(leftright){intmidleft(right-left)/2;if(arr[mid]key){rightmid-1;}else{leftmid1;}}for(intji-1;jleft;j--){arr[j1]arr[j];}arr[left]key;}}它的特点是查找插入位置从线性扫描变成二分查找比较次数减少了但元素右移的次数并没有本质减少所以二分插入排序不能把整体复杂度降到 O(n log n)因为移动元素的成本仍然可能是 O(n²)。变体 3希尔排序本质上是“分组插入”如果继续沿着“插入排序太怕远距离逆序”这个问题往前走就会得到一个更强的改进思路先让相距较远的元素也能提前比较和移动再逐步缩小间隔最后回到普通插入排序收尾这就是希尔排序的核心想法。后续讲到希尔排序时再详细说。八、与冒泡排序、选择排序对比对比项冒泡排序选择排序插入排序核心动作相邻比较并交换扫描后选最值交换取出当前元素插入前面有序区间最好时间复杂度O(n)O(n²)O(n)平均时间复杂度O(n²)O(n²)O(n²)稳定性稳定不稳定稳定对几乎有序数据是否友好较友好不友好非常友好数据移动特点交换频繁交换少但比较固定以“元素后移 最后落位”为主工程小数组优化价值一般一般较高一句话总结冒泡是在“推”选择是在“挑”插入是在“腾位置后放进去”。九、OJ 例题讲解例题 1LeetCode 1051 — 高度检查器小数据插入排序可直接通过题目来源LeetCode题号 1051难度⭐☆☆☆☆ 简单题目链接https://leetcode.cn/problems/height-checker/题目描述给你一个整数数组heights表示学生当前站位的身高。把它按非递减顺序排好后统计有多少个位置上的值与原数组不同。数据范围1 n 1001 heights[i] 100为什么这题适合用插入排序这题的数据规模非常小n最多只有100。所以完全可以先复制原数组对副本使用插入排序再逐位比较原数组与排序后数组统计不同位置数量也就是说这不是“只能拿来做模板练习”的题而是一道直接手写插入排序也能顺利通过的基础题。C 解法插入排序写法// 头文件编译平台提供classSolution{public:intheightChecker(vectorintheights){vectorintexpectedheights;intnexpected.size();for(inti1;in;i){intkeyexpected[i];intji-1;while(j0expected[j]key){expected[j1]expected[j];j--;}expected[j1]key;}intans0;for(inti0;in;i){if(heights[i]!expected[i]){ans;}}returnans;}};这题适合拿来练什么练最标准的数组插入排序模板练“排序后再比较”的常见解题套路体会小数据范围下O(n²)算法依然完全可用例题 2LeetCode 147 — 对链表进行插入排序思想直接对应题目来源LeetCode题号 147难度⭐⭐⭐☆☆ 中等题目链接https://leetcode.cn/problems/insertion-sort-list/题目描述给定单链表的头节点head请你使用插入排序对链表进行排序并返回排序后的链表头节点。Definition for singly-linked list.struct ListNode {int val;ListNode *next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode *next) : val(x), next(next) {}};为什么这题和插入排序高度匹配因为题目要求的就是“链表版插入排序”。它和数组版插入排序的共同点是都维护一个“已经有序”的部分每次从未排序部分取出一个元素把它插到已排序部分的正确位置不同点在于数组插入时往往要移动一串元素链表插入时不需要搬值只要改指针所以这题非常适合帮助你理解插入排序的核心不在“数组”而在“把一个新元素插到已有序结构中”。C 解法/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */classSolution{public:ListNode*insertionSortList(ListNode*head){ListNodedummy(0);// 无实际意义的头结点用dummy-next来指当前生成的链表ListNode*curhead;while(cur!nullptr){ListNode*nextNodecur-next;ListNode*prevdummy;while(prev-next!nullptrprev-next-valcur-val){prevprev-next;}cur-nextprev-next;prev-nextcur;curnextNode;}returndummy.next;}};这题适合拿来练什么练“插入排序思想”和“链表操作”结合练虚拟头结点dummy的写法理解为什么链表在“插入”这件事上天然比数组更顺手例题 3POJ 1007 — DNA Sorting稳定排序的价值题目来源POJ / PKU OJ题号 1007难度⭐⭐☆☆☆题目链接http://poj.org/problem?id1007题目描述给你m个长度为n的 DNA 字符串需要按每个字符串的“逆序数”从小到大进行稳定排序后输出。数据范围n 50m 100为什么这题适合出现在插入排序章节这题和插入排序的契合点非常强数据量不大m最多只有100完全可以直接手写稳定排序题目明确要求稳定排序而插入排序天然稳定排序对象不是整数而是“带权记录”更能体现稳定排序在真实题目里的价值也就是说这题不是单纯的“把数字排一下”而是要你意识到当排序键相同、又要求保留原顺序时稳定排序就很重要。C 解法计算逆序数 稳定插入排序#includeiostream#includestring#includevectorusingnamespacestd;structNode{string s;intscore;};intgetScore(conststrings){intcnt0;intns.size();for(inti0;in;i){for(intji1;jn;j){if(s[i]s[j]){cnt;}}}returncnt;}intmain(){intn,m;cinnm;vectorNodearr(m);for(inti0;im;i){cinarr[i].s;arr[i].scoregetScore(arr[i].s);}for(inti1;im;i){Node keyarr[i];intji-1;while(j0arr[j].scorekey.score){arr[j1]arr[j];j--;}arr[j1]key;}for(inti0;im;i){coutarr[i].sendl;}return0;}这题适合拿来练什么练“结构体排序”而不是“纯整数排序”练稳定排序的真实使用场景体会插入排序为什么在小规模、稳定性要求明确的题里依然有价值十、适用场景场景是否适用原因数据量很小如n 50或n 100✅常数小、代码短、实现简单数组几乎有序✅总移动距离短速度很可观需要稳定排序✅相等元素相对顺序不变小区间工程优化✅常作为大排序算法的小区间收尾方案大规模随机数组❌平均仍是 O(n²)不适合主力排序元素远距离错位很多❌会产生大量后移操作十一、常见错误总结错误原因正确做法每次比较都直接交换相邻元素把“后移插入”写成了“频繁交换”先保存key统一后移赋值再一次落位while写成arr[j] key会破坏稳定性只在arr[j] key时右移忘记最后arr[j 1] key找到了位置却没真正插进去循环结束后必须落位误以为二分插入排序是 O(n log n)忽略了元素移动成本比较次数降了但移动仍可能是 O(n²)误以为它只适合教学忽略了它对近乎有序数据和小区间优化的价值记住它在工程里也常被拿来做小范围收尾总结要点内容核心思想每轮取出一个元素插入到前面已经有序的区间中时间复杂度最好 O(n)平均/最坏 O(n²)空间复杂度O(1)原地排序稳定性✅ 稳定关键特点对几乎有序数据特别友好思想延伸二分插入、链表插入、希尔排序一句话记住它插入排序最像人手整理扑克手牌——每接收一个新排新元素把它插入手牌中对应位置插入已有序队列中的对应位置上一篇2.2.选择排序——每轮找最小为什么交换更少却反而不稳定下一篇2.4.快速排序——先分区再递归为什么它平均这么快却可能退化看完有收获的话点个赞再走有问题欢迎评论区讨论

相关文章:

2.3.插入排序——像打牌一样整理数组,为什么它对“几乎有序”数据特别友好?

2.3.插入排序——像打牌一样整理数组,为什么它对“几乎有序”数据特别友好? 系列:搜索与排序 | 第 3 篇,共 16 篇 难度:⭐☆☆☆☆ 入门级 标签:排序 插入排序 稳定排序 基础算法 小数据优化 上一篇&#x…...

[论文分享] ICLR 2026 Oral GEPA:反思性提示词演化可以超越强化学习

摘要 大型语言模型(LLMs)正越来越多地通过强化学习(RL)方法(如群体相对策略优化 GRPO)来适应下游任务,而这类方法通常需要数千次尝试(rollouts)才能学习新任务。我们认为…...

OpenClaw技能开发入门:为千问3.5-9B编写自定义文件处理器

OpenClaw技能开发入门:为千问3.5-9B编写自定义文件处理器 1. 为什么需要自定义文件处理器 上周我在整理项目文档时,发现一个重复性痛点:每次收到同事发来的Markdown文件,都需要手动执行"格式校验→重命名→按日期归档→生成…...

何为多态?

多态的概念多态是面向对象编程的三大特性之一(封装、继承、多态),指同一操作作用于不同对象时会产生不同的行为。具体表现为父类引用指向子类对象,并在运行时根据实际对象类型调用相应的方法。多态的好处提高代码扩展性通过多态&a…...

面向对象分析模型深入分析

面向对象分析模型深入分析 面向对象分析(Object-Oriented Analysis, OOA)是系统分析师在需求阶段的核心工作方法。它强调从问题域中的客观实体出发,以“对象”为基本单元建立业务模型,而不是从功能或数据流出发。下面从核心概念、三大模型、建模流程到实战案例进行全面解析…...

先被日本汽车打败,再被中国汽车冲击,欧洲车面临崩盘,已累计裁员50万人!

大众汽车在公布2025年的利润腰斩之后,发布了进一步裁员计划,到2030年将削减5万个工作岗位,占它当下员工总人数的比例大约7.5%,由此业界人士统计了近几年来欧洲诸多车企以及汽车供应链企业宣布的裁员人数,发现欧洲汽车行…...

Python智能自动化:JianYingApi赋能视频处理新范式

Python智能自动化:JianYingApi赋能视频处理新范式 【免费下载链接】JianYingApi Third Party JianYing Api. 第三方剪映Api 项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi 在数字内容创作领域,视频处理的智能化与自动化已成为提升效率…...

镜像视界|大模型+空间智能:公安视频系统迈入“目标持续掌控时代”——融合多视角三角测量、动态三维重构与行为认知引擎的无感定位体系

📘 镜像视界|大模型空间智能:公安视频系统迈入“目标持续掌控时代”——融合多视角三角测量、动态三维重构与行为认知引擎的无感定位体系一、时代转折:公安视频系统进入“大模型时代”近年来,以大模型为代表的新一代人…...

无失效数据的产品可靠性评估案例

当所有寿命相关的试验全部通过且无失效发生时如何评价产品可靠性作者:Julius王政 关键点o 一个产品可能有几项与寿命相关的可靠性验证试验。例如,车辆中使用的电子控制模块(我们称之为 ECU)通常有以下四项与寿命相关的试…...

镜像视界|AI空间计算重塑公安实战:从“找人”到“锁人”的智能体革命——基于Pixel-to-Space、MatrixFusion与三维轨迹建模的空间级无感定位系统

📘 镜像视界|AI空间计算重塑公安实战:从“找人”到“锁人”的智能体革命 ——基于Pixel-to-Space、MatrixFusion与三维轨迹建模的空间级无感定位系统 一、实战痛点:为什么公安仍停留在“找人阶段” 在当前公安实战中&#xff0c…...

java单例模式 懒汉式(双重检查锁)

/*** 懒汉式 方式6 双重检查锁*/ public class SingletonLazy {// 1、私有构造方法private SingletonLazy(){}// 2、在成员变量位置声明一个静态对象private static volatile SingletonLazy instance; // 关键字volatile:禁止指令重排序,确保绝对安全// …...

wUU代码混淆实战指南:使用Obfuscar构建坚不可摧的安全防线

在当今数字化时代,保护.NET应用程序的源代码安全变得尤为重要。你是否担心自己的知识产权被轻易窃取?是否希望防止竞争对手通过反编译分析你的核心业务逻辑?今天,我将为你详细介绍一款强大的开源混淆工具——Obfuscar,…...

Memfit AI 渗透测试智能体,到底能不能打?

深度测评:Memfit AI 渗透测试智能体,到底能不能打? 写在前面:这篇文章我写了整整一周,从安装部署到实际测试,把 Memfit AI 这个号称"下一代 AI 渗透测试平台"的工具从头到尾摸了一遍。先说结论&a…...

新手学吉他必看,这5个常见误区,避开了少走3个月弯路

经常会看到很多新手学吉他,学着学着就卡壳学不下去了,不是嫌按弦手疼,就是曲子弹不下去。特别是一些自学的朋友,网上随便东找些课,西看些视频,学下来进步很慢,3个月之后就改打“退堂鼓”了。其实…...

聊着天把虾队管了:用 HiClaw 正确打开多智能体协作方式【限时领 PPT】

作者:戴靖泽(静择) 本文整理自 DataWhale x HiClaw 直播分享,聊聊多 Agent 协作背后的工程思考。 点击此处,查看分享! 你有没有试过让一个 AI 同时写前端和后端?聊到后面它把自己定好的 API …...

OpenClaw低代码开发:Qwen2.5-VL-7B自动化流程设计器入门

OpenClaw低代码开发:Qwen2.5-VL-7B自动化流程设计器入门 1. 为什么需要可视化流程设计器? 上周我尝试用OpenClaw自动处理一批产品截图和说明文档时,遇到了一个典型问题:需要先让Qwen2.5-VL-7B识别图片中的关键元素,再…...

zotero使用记录

写在前面,我之前阅读文献使用endnote,仅仅使用他管理文献,然后使用豆包辅助阅读(翻译,搜索,总结,提问(看不懂的地方、公式推导都可以问)),最后使用vscode 编辑markdown 记笔记;这样一个流程看起…...

94吨黄金“上链搬家”,手续费仅0.0016%!黄金RWA正在改写跨境资产流动

传统金融数百万美元的物流成本vs区块链毫厘之间的链上费用,资产数字化的未来已来。近日,Tether首席执行官Paolo Ardoino在X平台发文称:过去6个月内,共有价值约94吨黄金的代币化黄金XAUT在链上完成转移,合计手续费仅约0…...

SwartNinjaPIR:嵌入式高可靠PIR运动检测驱动库

1. SwartNinjaPIR 库概述:面向嵌入式系统的高可靠性 PIR 运动检测驱动设计SwartNinjaPIR 是一个专为 Arduino 及兼容平台(如 STM32、ESP32 等基于 Arduino Core 的 MCU)设计的轻量级、生产就绪型被动红外(Passive Infrared, PIR&a…...

Vodafone K4606 USB调制解调器Linux内核驱动适配

1. Vodafone USB Modem 驱动适配技术解析:K4606 型号的底层支持实现 1.1 项目背景与工程定位 VodafoneUSBModem 是一个面向嵌入式 Linux 系统的 USB 串行通信驱动增强项目,其核心目标并非开发全新协议栈,而是对上游 Linux 内核中已有的 op…...

STM32电位器驱动库:轻量级ADC封装与中值滤波实现

1. 项目概述MentorBit-Potenciometro 是一款专为 MentorBit 系统设计的轻量级电位器(Potentiometer)模块驱动库,面向 STM32 平台(典型为 STM32F4/F7/H7 系列)的嵌入式固件开发。该库并非通用 ADC 抽象层,而…...

探索PLECS仿真下DAB变换器峰值电流前馈控制策略——IEEE顶刊复现之旅

PLECS仿真,IEEE顶刊复现,DAB变换器峰值电流前馈控制策略。最近在电力电子领域的研究中,我深入钻研了DAB(Dual - Active - Bridge)变换器的相关控制策略,并通过PLECS仿真实现了IEEE顶刊论文里一种峰值电流前…...

STM32智能展柜控制系统设计与实现

1. 项目概述在博物馆文物保存领域,环境参数的精确控制一直是个技术难点。我最近完成了一个基于STM32的智能展柜控制系统项目,这套方案能够实时监测并调节展柜内的温湿度及光照强度,为珍贵文物提供最佳保存环境。相比传统的人工监测方式&#…...

Python依赖包安装失败?一招搞定Microsoft Visual C++缺失问题

1. 为什么Python安装依赖包会提示缺少Microsoft Visual C? 这个问题困扰过无数Python开发者。当你兴致勃勃地敲下pip install xxx,结果却看到红色报错提示"Microsoft Visual C 14.0 or greater is required",那种感觉就像开车时突然…...

JAE日本航空电子推出满足汽车市场小型防水最新需求的MX80系列连接器

随着汽车电子化和高功能化的演进,每辆汽车所搭载的电子设备数量逐年增加。为了在有限安装空间内集成更多的功能,车载用电子零部件必然要求进一步小型化,高功能化。同时由于连接各设备之间的布线空间也在缩小,因此开发小型化&#…...

渗流完美降雨边界:单、双重渗透介质降雨边界处理的改进探索

渗流完美降雨边界——基于单、双重渗透介质降雨边界处理的改进 [1]模型简介:使用数值模拟软件COMSOL复现论文(窦智,刘一民,周志芳,等.基于单、双重渗透介质降雨边界处理的改进[J].岩土力学,2022,43(03):789-798.),该文献针对传统降…...

基于 PLC 的自动门控制系统设计与仿真程序探索

基于plc的自动门控制系统设计 仿真程序资料在自动化控制领域,基于 PLC(可编程逻辑控制器)的自动门控制系统应用广泛。今天咱就唠唠这基于 PLC 的自动门控制系统设计以及相关的仿真程序资料。 自动门控制系统设计需求 自动门要实现多种功能&a…...

数据转换器(ADC/DAC)核心术语与工程实践解析

1. 数据转换器基础概念解析在电子工程领域,数据转换器(ADC/DAC)是连接模拟世界与数字系统的关键桥梁。作为一名从业十余年的硬件工程师,我经常遇到新手对这些专业术语感到困惑的情况。本文将系统梳理56个核心术语,结合…...

全球不到3%的C++开发者掌握的量子模拟技巧:利用constexpr量子门编译期展开,启动速度提升41倍

第一章:量子计算 C 量子比特模拟示例在经典C环境中模拟量子比特行为,是理解量子门操作与叠加态演化的有效教学手段。本节基于线性代数原理,使用标准C17及以上特性(无需外部量子SDK),通过复数向量与酉矩阵实…...

Windows苹果设备驱动终极指南:3分钟搞定iPhone/iPad连接难题

Windows苹果设备驱动终极指南:3分钟搞定iPhone/iPad连接难题 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/…...