内部排序-直接插入排序
写在前面:参考《数据结构(C语言版)》严蔚敏 吴伟民 编著 清华大学出版社 2008年10月第27次印刷
📋 算法概述
直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排号序的有序表中,从而得到一个新的、记录数增1的有序表。
🎯 算法特点
特性 | 说明 |
---|---|
稳定性 | 稳定排序算法 |
原地排序 | 是,只需要常数级的额外空间,所以空间复杂度为O(1) |
最佳情况 | O(n) - 当输入数据已经是正序时 |
最差情况 | O(n²)- 当输入数据是反序时 |
平均情况 | O(n²) - 所以时间复杂度为O(n²) |
🔍 算法原理
tips:联想我们在打扑克的时候,整理手牌的过程。目前手上有5张牌,分别是黑桃7、黑桃8、黑桃6、黑桃10和黑桃5。现在需要按照从小到大的顺序排列。
- 将第一个元素视为已排序序列:黑桃7
- 从下一个元素开始,视为待插序列key:黑桃8
- 将待插序列key与已排序序列从后向前对比:黑桃8对比黑桃7
4. 待插序列key大于或等于已排序列:若对比到第一个元素,则跳到步骤2;其它则重复步骤3
2. 待插序列key小于已排序列:黑桃6对比黑桃8,则将黑桃8向后移动一位。此时序列:黑桃7、空隙、黑桃8、黑桃10和黑桃5。重复步骤3 - 重复步骤23:此时序列:黑桃6、黑桃7、黑桃8、黑桃10和黑桃5
- 终止条件:重复步骤23,直到所有元素都插入到正确位置。此时序列:黑桃5、黑桃6、黑桃7、黑桃8和黑桃10
💻 C# 实现代码
🚀示例
/// <summary>/// 对 list 直接插入排序 从小到大/// </summary>/// <param name="list">数据列表</param>private void StraightInsertionSort(List<int> list){if (list == null || list.Count == 0) return;/**初始化:49, 38, 99, 13, 49, 57* 第一趟: 38, 49, 99, 13, 49, 57* 第二趟: 38, 49, 99, 13, 49, 57* 第三趟: 38, 49, 空, 99, 49, 57* 第三趟: 38, 空, 49, 99, 49, 57* 第三趟: 空, 38, 49, 99, 49, 57* 第三趟: 13, 38, 49, 99, 49, 57* 第四趟: 13, 38, 49, 49, 99, 57* 第五趟: 13, 38, 49, 49, 57, 99*/for (int i = 1; i < list.Count; i++){int current = list[i];int j = i - 1;// 移动元素而不是交换while (j >= 0 && list[j] > current){list[j + 1] = list[j];j--;}list[j + 1] = current;}}
🧪 算法演示
示例执行过程
输入数组: [49, 38, 99, 13, 49, 57]
📊 原始数组: 49, 38, 99, 13, 49, 57🔄 第 1 趟排序后: 38, 49, 99, 13, 49, 57
🔄 第 2 趟排序后: 38, 49, 99, 13, 49, 57
🔄 第 3 趟排序后: 38, 49, 空, 99, 49, 57
🔄 第 3 趟排序后: 38, 空, 49, 99, 49, 57
🔄 第 3 趟排序后: 空, 38, 49, 99, 49, 57
🔄 第 3 趟排序后: 13, 38, 49, 99, 49, 57
🔄 第 4 趟排序后: 13, 38, 49, 49, 99, 57
🔄 第 5 趟排序后: 13, 38, 49, 49, 57, 99✅ 排序后的数组: 13, 38, 49, 49, 57, 99
📝 实践
扩展思考题:
- 如何修改算法实现降序排序?
- 使用不同举例感受排序过程、稳定性(11,22,33,44,55或者55,44,33,22,11或者11,33,22,33,22等)?
- 在实际项目中,什么情况下会选择使用这种排序?
适用场景
场景 | 适用性 | 原因 |
---|---|---|
小规模数据 | 高 | 常数因子小,实际运行效率高 |
基本有序数据 | 高 | 接近最好情况O(n)的时间复杂度 |
链表结构 | 高 | 插入操作只需改变指针,无需移动元素 |
在线排序 | 高 | 可以动态插入新元素到已排序序列 |
大规模无序数据 | 低 | O(n²)的时间复杂度导致性能差 |
相关文章:
内部排序-直接插入排序
内部排序-直接插入排序内部排序-直接插入排序 写在前面:参考《数据结构(C语言版)》严蔚敏 吴伟民 编著 清华大学出版社 2008年10月第27次印刷 📋 算法概述 直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排号序的…...
玩转n8n测试自动化:核心节点详解与测试实战指南
掌握节点,掌握自动化测试的核心 在n8n中,节点(Node)是构建自动化工作流的基础单元。每一个节点都代表一个特定的操作或功能,通过将不同的节点连接起来,我们就能创造出强大的测试自动化流程。本章将深入讲解测试工程师必须掌握的几类核心节点,并通过实际测试场景展示如何…...
Linux:龙晰系统(Anolis)更新yum(dnf)仓库源
一、备份现有仓库源 1. 查看当前系统版本 cat /etc/os-release2. 备份现有仓库源 # 一共两个文件,都需要备份下:AnolisOS-BaseOS.repo AnolisOS-AppStream.repo cp /etc/yum.repos.d/AnolisOS-BaseOS.repo /etc/yum.repos.d/AnolisOS-BaseOS.repo.bak cp /etc/yum.repos.d/…...
(笔记)多项式基础 FFT
多项式 \[F(x)=\sum_{i=0}^{i-1}a_ix^i \]对多项式进行乘法,就是对两个多项式进行加法卷积。其中卷积结果 \(C(k)=\sum_{i=0}^kA(i)B(k-i)\)。 分治乘法 将 \(A(x)\) 左右拆半,不足则末尾(最高位)补上 \(0\),令 \(n=2^k\)。则 \[A(x)=A_0(x)+x^{n/2}A_1(x) \]\[A_0(x)=\su…...
MAC tomcat启动报错
MAC tomcat启动报错 org/apache/catalina/startup/Bootstrap has been compiled by a more recent前言 配置好tomcat启动报错 已连接到地址为 127.0.0.1:50303,传输: 套接字 的目标虚拟机 已与地址为 127.0.0.1:50303,传输: 套接字 的目标虚拟机断开连接 Exception in thread…...
研究生-必看-倒计时3天/武汉科技大学主办/稳定EI会议/高层次教授出席报告
武汉科技大学主办/EI稳定检索/大数据与智慧医学📢大数据与智慧医学国际学术会议(BDIMed 2025) 🔍武汉科技大学主办|高层次嘉宾出席报告| IEEE出版EI/Scopus/IEEE Xplore检索|高录用、快见刊 🔍征稿范围广:数字健康技术|智能医疗与可穿戴智能|物联网与智慧健康|医学成像…...
LGP7113 [NOIP 2020] 排水系统 学习笔记
LGP7113 [NOIP 2020] 排水系统 学习笔记 Luogu Link 题意简述 给定一个 \(n\) 个点的 \(\texttt{DAG}\)。我们认为它是一个排水系统。 节点 \(u\) 有 \(d_u\) 条输出管道,污水会被平分成 \(d_u\) 份流向下家节点。特别的,\(d_u=0\) 时认为这个节点直通污水厂,是一个最终排水…...
MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... for column FieldName at row 1
问题:MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... for column FieldName at row 1 原因:在 MySQL 中遇到错误 MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... 通常是由于尝试将一个不兼容的字符编码插入到数据库中导致的。…...
Burp Suite Professional 2025.9 发布 - Web 应用安全、测试和扫描
Burp Suite Professional 2025.9 (macOS, Linux, Windows) - Web 应用安全、测试和扫描Burp Suite Professional 2025.9 (macOS, Linux, Windows) - Web 应用安全、测试和扫描 Burp Suite Professional, Test, find, and exploit vulnerabilities 请访问原文链接:https://sysi…...
SQL Server 2022 RTM 累积更新 #21 发布
SQL Server 2022 RTM 累积更新 #21 发布SQL Server 2022 RTM 累积更新 #21 发布 Microsoft SQL Server 2022 RTM GDR & CU21 (2025 年 9 月更新) relational database management system (RDBMS) & Transact-SQL (T-SQL) 请访问原文链接:https://sysin.org/blog/sql-s…...
针对WPF的功耗优化(节能编程)
一、UI渲染优化 1. 减少不必要的视觉元素<!-- 避免过度使用复杂效果 --> <Border Background="LightGray" CornerRadius="5" Margin="5" Padding="10"><!-- 使用简单样式代替复杂模板 --> </Border><!-- 而…...
Docker 清理完整指南:释放磁盘空间的最佳实践 - 详解
Docker 清理完整指南:释放磁盘空间的最佳实践 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monos…...
微算法科技(NASDAQ: MLGO)开发Rollup技术,探索区块链扩展性解决方案
随着区块链技术的广泛应用,其扩展性问题逐渐成为制约行业发展的核心瓶颈。传统区块链架构在高频交易场景下,因链上资源有限,导致交易确认时间长、手续费高昂,难以满足商业级应用需求。为解决这一痛点,微算法科技(NASDAQ: MLGO)基于状态通道技术积累,进一步研发Rollup技…...
征稿倒计时3天/武汉科技大学主办/医学人工智能/现可享优惠
📢大数据与智慧医学国际学术会议(BDIMed 2025) 📮武汉科技大学主办|高层次嘉宾出席报告| IEEE出版EI/Scopus/IEEE Xplore检索|高录用、快见刊 📆征稿范围广:数字健康技术|智能医疗与可穿戴智能|物联网与智慧健康|医学成像和信息学 等方向均可投递 🔥参会多元化:投稿…...
生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!
本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构设计与核心技术积淀。作者:执少 对,这是一篇你明知道怎么回事儿,但还是会点进来看的文章! 本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构…...
NOI linux使用教程
一、配置NOI linux环境为中文 1. 桌面右键setting 2.下拉找到地区&语言,点击Manage Installed Languages 3. 选择安装其他语言包Install / Remove Languages 4. 勾选简体中文Chinese (simplified) 5. 输入密码后确认 6. 等待安装即可 7. 安装完后,选择语言下拉选项中的中…...
springboot 文件处理框架
-------------------------------------------------------------------------------------------Apache POI 是一款常用的 Excel 处理工具,但在一些场景下,存在内存占用高、处理速度慢等问题。以下是一些比 POI 更具优势的轻量级 Excel 处理工具:EasyExcel:是阿里巴巴开源…...
Docker:龙晰系统(Anolis)更新yum源下载docker
一、配置Docker的yum库 1. 查看系统版本 # 查看系统版本 cat /etc/os-release2. 配置系统yum源 这里可以看我的另一篇文章: 3. 卸载旧版docker与podman 重点:podman与docker冲突!!龙蜥Anolis Linux默认安装Podman作为容器管理工具,这是由于Podman是Red Hat(龙蜥的开发者之…...
针对单输入单输出、多输入多输出及三阶系统带约束的模型预测控制的实现
针对单输入单输出(SISO)、多输入多输出(MIMO)及三阶系统带约束的模型预测控制(MPC)的实现 一、SISO系统MPC实现 1. 系统建模与离散化 % 传递函数定义(二阶惯性环节) s = tf(s); G = 1/(s^2 + 2*s + 1); Ts = 0.1; % 采样时间 Gd = c2d(G, Ts, zoh); % 离散化关键参数:…...
vue3中父子组件数据同步的默认方式update:xxx
update:xxx 是Vue 3中实现自定义v-model的约定。它的工作原理是: 子组件通过emit(update:propName, newValue)通知父组件需要更新某个属性父组件可以通过v-model:propName="data"或@update:propName="data = $event"来接收这个更新 父组件:<template&…...
解决 C# 当另一个read操作挂起时不能调用read方法的问题
life runs on code作者: zhaotianff转载请注明出处...
AI辅助编程_工具和方式
AI编程AI 编程 这个时代的方式定义问题、建构系统、引导协作 方式 1. Copilot 模式:你写头它写尾 2. Agent 模式:你说话,它写程序 “氛围感编程” 产品形态插件和IDE两种 模式 :问答模式(Ask)、文件编辑模式(Edit)、智能体模式(Agent) 国内百度 腾讯: https://c…...
[完结10章]Java大模型工程能力必修课,LangChain4j 入门到实践
在人工智能技术飞速发展的今天,大型语言模型(LLM)已成为推动创新的核心驱动力。对于Java开发者而言,掌握大模型工程能力不再是一种选择,而是一种必需。LangChain4j作为专为Java开发者设计的工具库,正在成为连接传统Java工程与大模型应用的重要桥梁。参考资料:/s/1kSb5z5…...
k8s源码分析——kubectl命令行交互
Cobra库 k8s各组件的cli部分都使用Cobra库实现,Cobra 中文文档 - 掘金 (juejin.cn),获取方式如下:go get -u github.com/spf13/cobra@latestcobra库中的Command结构体的字段,用于定义命令行工具的行为和选项。它们的作用如下:Use: 命令名称。Aliases: 命令的别名。Suggest…...
将 seata 2.5 发布到私服
将 seata 2.5 发布到私服1.概述 我们在使用seata 做分布式事务的时候,有时需要将 seata 发布到私服中,方便 修改和调整。 2.实现过程 2.1 在根目录下的pom.xml 中 增加发布配置 <distributionManagement><repository><id>jpaas-release</id><url&…...
一些感悟
1. 突破分型 50分 2. 驱动浪 30分 3. 驱动浪突破分型 80分 4. 驱动浪突破分型 回调61.8% 或 80% 做单 100分 其中突破分型是做单前提 重中之重!...
五款免费低代码平台深度横评:斑斑、简道云、宜搭、氚云、织信如何选?
在当今数字化转型的浪潮中,低代码开发平台以其可视化、拖拽式的开发模式,极大地降低了企业应用开发的门槛和成本,成为企业提升效率、快速响应市场变化的重要工具。对于预算有限的中小企业、初创团队或业务部门而言,免费的低代码平台是绝佳的入门选择。本文将为您客观评析五…...
ubuntu历史版本下载
https://old-releases.ubuntu.com/releases/LTS版本:...
读书笔记:数据库索引的智能优化:反向键与降序索引
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学习《Expert Oracle Database Architecture Techniques and…...
代码随想录算法训练营第十天| 232.用栈实现队列、 225. 用队列实现栈、20. 有效的括号 、1047. 删除字符串中的所有相邻重复项
232.用栈实现队列 题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/ 解题思路:用两个栈实现队列,一个入栈,把入栈里面的元素全部放入出栈 代码实现:点击查看代码def __init__(self):self.stack_in = [] #入栈,主要负责pushself.stack_o…...
零成本搭建企业系统:五款免费低代码平台推荐
概述 在数字化转型的背景下,低代码平台正成为企业快速构建信息系统的重要工具。它们通过可视化、组件化的方式,大幅降低了开发门槛和时间成本,即使没有编程背景的业务人员也能参与系统搭建。本文将为大家推荐五款值得尝试的免费低代码平台,帮助中小团队或个人实现零成本高效…...
故障处理:access$表在数据库丢失的恢复
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。故障处理:access$表在数据库丢失的恢复 下面是测试一把access$基表丢失…...
从需求出发:教你判断选斑斑还是织信
斑斑低代码以免费、私有化部署优势,适合中小企业;织信则提供高端解决方案,适合中大型企业,两者各有特色。在数字化转型的浪潮中,低代码开发平台正成为企业降本增效的利器。在众多国产平台中,斑斑低代码和织信无疑是受关注的两个选择。本文将从多个维度深入分析这两款平…...
PLC结构化文本设计模式——建造者模式(Builder Pattern)
PLC Structured Text Design Patterns PLC结构化文本设计模式——建造者模式(Builder Pattern) 介绍 建造者模式是一种创建型设计模式,它允许你创建复杂对象的步骤与表示方式相分离。 建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离…...
C++ - STL - 迭代器
什么是迭代器?🤔 想象一下,你有一排整齐的书架,上面放着很多书。你现在想从第一本开始,一本一本地看书名。你怎么做呢? 你会用手指指着第一本书,看完书名后,手指移动到下一本书,再看书名,这样一直指到最后一本书。 在C++的STL中,迭代器就是你的"手指"!它…...
MATLAB的智能扫地机器人工作过程仿真
MATLAB的智能扫地机器人工作过程仿真,结合环境建模、路径规划、避障算法和动态清扫流程一、代码 %% 环境建模(20x20网格地图) mapSize = [20,20]; obstacleDensity = 0.2; % 障碍物密度% 生成随机障碍物地图 envMap = ones(mapSize); obstacles = randi([1,mapSize(1)], cei…...
linux redis 8.2.1软件开机启动redis.service与etc下的rc.local配置2种方式
### 2025-9-8 linux redis 8.2.1软件开机启动```linux 软件开机启动第一种:写服务1、sudo vim /etc/systemd/system/redis.service 内容如redis.service.txt下:[Unit]Description=Redis In-Memory Data StoreAfter=network.target [Service]User=redisGroup=redisExecStart=…...
在GA中添加Tag-GetDynamicSpecSourceTags().AddTag(NewTag)
GetDynamicSpecSourceTags().AddTagexample:FGameplayAbilitySpec AbilitySpec = FGameplayAbilitySpec(AbilityClass,1);AbilitySpec.GetDynamicSpecSourceTags().AddTag(NewTag);其中AbilityClass是GA的Class...
python如何在函数中使用全局变量?
在 Python 中,全局变量是定义在函数外部的变量。要在函数中使用全局变量,需要根据具体情况使用 global 关键字,以下是详细说明和示例: 1. 只读全局变量(无需声明) 如果只是在函数中读取全局变量的值,不需要任何特殊声明,直接使用即可: # 定义全局变量 global_var = &q…...
296、贾生
296、贾生296、贾生 唐●李商隐 宣室求贤访逐臣,贾生才调更无伦。 可怜夜半虚前席,不问苍生问鬼神。【现代诗意译】 汉文帝 在宣室求贤访能 召见贾谊 这个被贬逐臣子 他的才华无与伦比皇帝半夜移膝向前 认真求教 可惜不问人民疾苦 问的是鬼神!小学生C++...
ubuntu 24.04部署mysql8.0.41(glibc2.17)
环境Os:ubuntu 24.04 desktop桌面版mysql:8.0.41 glibc2.17查看操作系统信息root@hxl-VirtualBox:/# uname -aLinux hxl-VirtualBox 6.14.0-29-generic #29~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Aug 14 16:52:50 UTC 2 x86_64 x86_64 x86_64 GNU/Linuxroot@hxl-VirtualBox:…...
C++ - STL - 键值对pair
键值对——pair STL中的pair是一个模板类,用于将两个可能类型不同的值组合成一个单元,常用于存储键值对或函数返回多个值的场景。 创建上面尖括号里面,是用来指定类型的。这种指定类型的方式STL会一直使用的。 更准确的应该是叫泛型,用到的技术是模板。 使用pair的元素 pai…...
第四天学习:LSTM
流水不争先,争的是滔滔不绝—— 每日渐进,终抵远方LSTM(Long Short-Term Memory,长短期记忆网络) 他的前身是RNN(循环神经网络),为啥我们拿着好端端的RNN不用,非要寻找其他的网络算法呢? 这是因为RNN本身存在缺陷:RNN的初衷:处理序列数据(如句子、语音、时间序列)…...
MATLAB的稀疏自编码器实现
一、核心实现代码 %% 数据准备(以MNIST手写数字为例) [XTrain, YTrain] = digitTrain4DArrayData; % 加载MNIST训练数据 XTest = digitTest4DArrayData; % 加载测试数据% 数据预处理(归一化+向量化) XTrain = double(reshape(XTrain, [], 28 * 28)) / 255; XTe…...
题解:P2157 [SDOI2009] 学校食堂
题目传送门 题目大意 有 \(n\) 个学生,每个学生有一个时间 \(t_i\),所花费的真实时间为 \(t_i\) 异或上前一个吃饭的同学的 \(t_i\)。每个学生有一个忍耐度,最多可以让后面 \(b_i\) 个同学比自己先吃饭。问在不违反忍耐度的条件下,让所有同学吃饭的最小时间。 解题思路 首先…...
LLM 应用开发中的常见模式
以下内容根据AI对话生成,如有雷同,纯属巧合1. 链式调用 (Chaining) 这是最基本也是最常见的模式。它指的是将多个 LLM 调用、数据处理步骤或工具调用按顺序连接起来,形成一个连贯的工作流。前一个步骤的输出是后一个步骤的输入。要解决的问题:单一 LLM 调用无法完成复杂任务…...
vue3 与 element-plus
Vue,Vite>> 安装 vue/cli 脚手架最新牍的cli脚本架为 5.0.9 版本, 在高版本的 Node 中安装脚手架时,会提示 版本不匹配; 主要适配 8~22版本的Node, 另外 Vue Cli 已进入维护模式,官方推荐新项目使用 vite 构建工具>> 切换到 22.18.0 版本重新安装 Vue/cli 不会出…...
可爱的二维数据结构们
前置知识 相信大家都学过了:树套树、二维树状数组; 四分树; K-D Tree;正文 给你一个 \(n\times n\) 二维平面,支持单点修改,矩形查询。这是我们树套树、二维树状数组能解决的,时间复杂度 \(\mathcal{O}(n\log^2n)\)。 那如果我们需要支持区间修改呢?此时不太能树套树,…...
网络安全相关职业
1、安全分析师是构建跨组织安全措施、保护公司免受攻击的关键人物。他们负责探索和评估公司网络,以发现可操作的数据和建议,供工程师制定预防措施。该职位需要与各利益相关方合作,以了解安全需求和安全形势。 2、安全工程师利用威胁和漏洞数据(通常来自安全团队)开发和实施…...
202005_CTFHUB_Redis流量
Redis流量分析Tags:流量分析,REDIS 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202005_CTFHUB_Redis.zip 0x01. WP 1. 用Wireshark打开流量包,过滤关键字flag 找到后半部分的flag及前半部分的参数名,过滤…...