内部排序-内部排序-直接插入排序·冒泡排序·快速排序对比
写在前面:参考《数据结构(C语言版)》严蔚敏 吴伟民 编著 清华大学出版社 2008年10月第27次印刷
📋 算法概述
直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排号序的有序表中,从而得到一个新的、记录数增1的有序表。
冒泡排序(参考书里面叫作起泡排序)(Bubble Sort)。重复地遍历待排序序列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。每次遍历都会将当前未排序部分的最大(或最小)元素“浮”到顶端,如同水中的气泡一样。
快速排序(Quick Sort)是对起泡排序的一种改进。采用分治法。首先选择一个基准元素,通过一趟排序将待排序列分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小。然后再按此方法对这两部分数据分别进行快速排序,整个过程递归进行。
🎯 算法特点
特性 | 直接插入排序 | 冒泡排序 | 快速排序 |
---|---|---|---|
核心思想 | 插入 | 交换 | 分治 |
时间复杂度(平均) | O(n²) | O(n²) | O(n log n) |
时间复杂度(最好) | O(n) (序列已基本有序) | O(n) (序列已有序) | O(n log n) |
时间复杂度(最坏) | O(n²) (序列逆序) | O(n²) (序列逆序) | O(n²) (基准选择不当,如序列已有序) |
空间复杂度 | O(1) | O(1) | O(log n) ~ O(n) (递归栈的深度) |
稳定性 | 稳定 | 稳定 | 不稳定 |
排序方式 | In-Place (内部排序) | In-Place (内部排序) | In-Place (内部排序) |
优点 | 1. 算法简单。 2. 对基本有序的序列效率极高。 3. 原地排序,空间效率高。 |
1. 算法极其简单,易于理解。 2. 原地排序,空间效率高。 |
1. 平均性能极快,是基于比较的内部排序中最好的方法之一。 2. 原地排序,缓存友好。 |
缺点 | 平均和最坏情况时间复杂度高,不适合大规模乱序数据。 | 效率非常低下,移动次数多,实际应用中几乎不被使用。 | 1. 最坏情况性能较差。 2. 递归实现需要额外的栈空间。 3. 不稳定。 |
适用场景 | 1. 数据量较小。 2. 序列基本有序。 3. 作为高级排序算法的子过程(如快速排序优化后的小数组用插入排序)。 |
主要用于教学,帮助理解排序概念。实际应用中几乎不会被使用。 | 1. 适用于大规模、乱序的数据集,是应用最广泛的通用排序算法。 2. 对时间复杂度要求高的场景。 |
🔍 算法原理
待补充
💻 C# 实现代码
🚀示例
using System.Diagnostics;namespace CsharpOne
{internal class Test0912{private delegate void DoSort(List<int> list);public void JustDoIt(){try{List<int> list = new List<int>() { 49, 38, 99, 13, 49, 57 };//list = new List<int>() { 11, 22, 33, 44, 55, 66 };//list = new List<int>();for (int i = 0; i < 10000; i++){list.Add(new Random().Next(1, 10000));//list.Add(i + 100);//list.Add(100000 - i);}Console.WriteLine(string.Join(",", list));List<int> list1 = [.. list];List<int> list2 = [.. list];List<int> list3 = [.. list];DoSort doSort1 = DoStraightInsertionSort;DoSort doSort2 = DoBubbleSort;DoSort doSort3 = DoQuickSort;DoStopwatch(doSort1, list1);DoStopwatch(doSort2, list2);DoStopwatch(doSort3, list3);}catch (Exception ex){Console.WriteLine(ex.Message);Console.WriteLine(ex.StackTrace);}}private void DoStopwatch(DoSort doSort, List<int> list){Stopwatch sw = Stopwatch.StartNew();sw.Start();var memory1 = GC.GetTotalMemory(true);doSort(list);// 通过委托调用排序方法Console.WriteLine($"{doSort.GetType().Name}****{doSort.Method.Name}************************");//Console.WriteLine(string.Join(",", list));var memory2 = GC.GetTotalMemory(true);Console.WriteLine($"memory1:{memory1}, memory2:{memory2}, diff:{memory2 - memory1} bytes");sw.Stop();Console.WriteLine($"time:{sw.ElapsedMilliseconds} ms");}private void DoStraightInsertionSort(List<int> list){StraightInsertionSort(list);}private void DoBubbleSort(List<int> list){BubbleSort(list);}private void DoQuickSort(List<int> list){QuickSort(list, 0, list.Count - 1);// list.Sort();}/// <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;}}/// <summary>/// 对 list 冒泡排序 从小到大/// </summary>/// <param name="list">数据列表</param>private void BubbleSort(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, 13, 99, 49, 57* 第一趟: 38, 49, 13, 49, 99, 57* 第一趟: 38, 49, 13, 49, 57, 99* * 第二趟: 38, 49, 13, 49, 57, 99* 第二趟: 38, 13, 49, 49, 57, 99* 第二趟: 38, 13, 49, 49, 57, 99* 第二趟: 38, 13, 49, 49, 57, 99* * 第三趟: 13, 38, 49, 49, 57, 99* 第三趟: 13, 38, 49, 49, 57, 99* 第三趟: 13, 38, 49, 49, 57, 99* * 第四趟: 13, 38, 49, 49, 57, 99* 第四趟: 13, 38, 49, 49, 57, 99* * 第五趟: 13, 38, 49, 49, 57, 99*/int flagData = 0;bool isSort = true;for (int i = 0; i < list.Count - 1; i++){isSort = true;for (int j = 0; j < list.Count - i - 1; j++){if (list[j] > list[j + 1]){isSort = false;flagData = list[j];list[j] = list[j + 1];list[j + 1] = flagData;}}if (isSort)// 若存在一次遍历发现已排序好,则无需继续遍历return;}}/// <summary>/// 对 list 进行快速排序 从小到大/// </summary>/// <param name="list">数据列表</param>/// <param name="left">左侧对比下标</param>/// <param name="right">右侧对比下标</param>private void QuickSort(List<int> list, int left, int right){if (list == null || list.Count == 0 || left < 0 || right >= list.Count) return;/**初始化:49, 38, 99, 13, 49, 57* 第一趟: P P位置的在下标为0,指向49* 第一趟: 49, 38, 99, 13, 49, 57* L R 首先移动R①* 第一趟: 49, 38, 99, 13, 49, 57* L R R位置的57不比49小,R左移* 第一趟: 49, 38, 99, 13, 49, 57* L R R位置的49不比49小,R左移* 第一趟: 13, 38, 99, 空, 49, 57* L R R位置的13比49小,相当于将13和49调换位置* 第一趟: 13, 38, 99, 空, 49, 57* L R 然后移动L②* 第一趟: 13, 38, 99, 空, 49, 57* L R L位置的38不比49大,L右移* 第一趟: 13, 38, 空, 99, 49, 57* L R L位置的99比49大,相当于将99和49调换位置* 第一趟: 13, 38, 49, 99, 49, 57* LR 再次移动R,发现R和L重合(若R和L没有重合就重复步骤①②,直到R和L重合),停止* 第一趟: P(49)左边都是小于49,P(49)右边都是大于或者等于49。返回Pivot = 2* * 递归调用P左边* 第二趟: P P位置的在下标为0,指向13* 第二趟: 13, 38 * L R 首先移动R* 第二趟: 13, 38 * LR R位置的38不比13小,R左移* 第二趟: 发现R和L重合,停止* 第二趟: P(13)左边都是小于13,P(13)右边都是大于或者等于13。返回Pivot = 0** 递归调用P右边* 第三趟: P P位置的在下标为0,指向99* 第三趟: 99, 49, 57* L R 首先移动R* 第三趟: 57, 49, 空* L R R位置的57比99小,相当于将57和99调换位置* 第三趟: 57, 49, 空* L R 然后移动L* 第三趟: 57, 49, 99* LR 发现R和L重合,停止。返回Pivot = 5* * 第四趟: P P位置的在下标为0,指向57* 第四趟: 57, 49 * 第四趟: L R 首先移动R* 第四趟: 49, 空 R位置的49比57小,相当于将49和57调换位置* 第四趟: L R 然后移动L* 第四趟: 49, 57 R位置的49比57小,相当于将49和57调换位置* 第四趟: LR 发现R和L重合,停止。返回Pivot = 4* * * 最终修改集合为: 13, 38, 49, 49, 57, 99*/if (left < right){int pivot = GetPivot(list, left, right);// 获取枢轴QuickSort(list, left, pivot - 1);// 对枢轴左侧进行快速排序QuickSort(list, pivot + 1, right);// 对枢轴右侧进行快速排序}}/// <summary>/// 获取枢轴(列表下标)/// </summary>/// <param name="list">数据列表</param>/// <param name="left">左侧对比下标</param>/// <param name="right">右侧对比下标</param>/// <returns></returns>private int GetPivot(List<int> list, int left, int right){int pivot = list[left];while (left < right){while (left < right && list[right] >= pivot){right--;}list[left] = list[right];while (left < right && list[left] < pivot){left++;}list[right] = list[left];}list[left] = pivot;return left; // 返回枢轴位置,列表下标}}
}
代码移位了,截图辅助理解
耗时对比
10000数据,多次调用排序并计时。耗时单位为ms。生成的都是从小到大的顺序。
排序 | 随机数 | 随机数 | 随机数 | 顺序数 | 顺序数 | 顺序数 | 逆序数 | 逆序数 | 逆序数 |
---|---|---|---|---|---|---|---|---|---|
直接插入排序 | 489 | 309 | 423 | 16 | 9 | 15 | 779 | 637 | 706 |
冒泡排序 | 1549 | 1436 | 1587 | 5 | 2 | 4 | 1714 | 1799 | 1843 |
快速排序 | 8 | 6 | 25 | 369 | 343 | 316 | 328 | 331 | 399 |
📝 实践
扩展思考题:
- 如何修改算法实现降序排序?
- 使用不同举例感受排序过程、稳定性(11,22,33,44,55或者55,44,33,22,11或者11,33,22,33,22等)?
- 在实际项目中,什么情况下会选择使用何种排序?
相关文章:
内部排序-直接插入排序冒泡排序快速排序对比
内部排序-直接插入排序冒泡排序快速排序对比内部排序-内部排序-直接插入排序冒泡排序快速排序对比 写在前面:参考《数据结构(C语言版)》严蔚敏 吴伟民 编著 清华大学出版社 2008年10月第27次印刷 📋 算法概述 直接插入排序(Straight Insertion Sort)是一种最简单的排…...
STM32读写EEPROM
代码如下#include "i2c.h" #include <string.h>/* M24C64设备地址(A0/A1/A2接地,7位地址为0x50,左移1位后为0xA0) */ #define EEPROM_ADDR (0x50 << 1) #define M24C64_PAGE_SIZE 32 // 页面大小:32字节 #define M24C64_WR…...
OpenStack Nova 创建虚拟机
创建虚拟机的过程是一个经典的分布式、异步、状态驱动的工作流。其核心设计哲学是:API 接收请求 -> 调度决策 -> 资源分配 -> 虚拟化层执行。整个过程涉及多个 Nova 服务以及外部组件(Glance, Neutron, Cinder, Keystone)。 1、基本流程 sequenceDiagramparticipan…...
AI革命2025:新一代人力资源管理系统十大标杆产品评测
导读:在数字化浪潮推动下,AI与移动技术正在重塑人力资源管理系统的行业格局。本文盘点了2025年中国市场十款主流智能人力资源管理系统,涵盖集团型、成长型及中小企业的核心需求。重点介绍红海eHR在AI智能体、移动端全流程和数据驱动决策上的创新优势,并通过多维度评分与场景…...
企业HR系统选型全指南:百人初创到万人集团的数字化方案与实施路径
导读:本篇文章围绕企业不同规模的人力资源管理需求,梳理了从百人初创到万人集团的HR系统选型逻辑。通过分层痛点分析、科学评估体系、信息密集对比表和真实案例,并系统推荐了包括i人事、北森、红海云在内的多款市场热门产品,助力企业高效推进HR数字化转型。本文属于深度内容…...
C++ auto关键字
C++ auto关键字的原理与使用auto关键字: 一、C++98标准auto关键字的作用和C语言的相同,表示自动变量,是关于变量存储位置的类型饰词,通常不写,因为局部变量的默认存储就是auto 1 void foo(void) 2 { 3 int a; //变量存储在栈区 4 auto int b; //…...
API 响应体加密场景下的调试实践:Postman 的局限与 Apipost 的优化
在日常开发和测试过程中,我们经常会遇到如下场景: 后端服务出于安全性或协议规范的考虑,对 API 的响应体进行了加密或编码处理,例如 Base64 编码、AES/RSA 加密等。这样做在生产环境中是合理且必要的,能够避免敏感数据被明文传输。但与此同时,也为开发和测试阶段的调试带…...
ARM主板:低功耗高性能的嵌入式计算核心
在当今数字化飞速发展的时代,计算机硬件领域不断创新变革,其中ARM主板凭借其独特的优势脱颖而出,成为众多应用场景的理想选择。无论是智能家居、工业自动化还是物联网设备等,都能看到它活跃的身影。下面将深入探讨ARM主板的相关特性、优势以及广泛的应用场景。 什么是ARM主…...
2025绩效管理必知
HR 往往是一个企业绩效管理的推动者,但是在推动的背后,实际有一个非常重要的目标,那就是提高个人和团队的绩效,从而提升企业整体的绩效。绩效管理就是要找到 “应该实现什么 “和 “如何实现 “这些问题的答案。它是关于寻找更有效的方法来提高业务绩效。 绩效管理关注什么…...
【刷题笔记】cf808f
CF803F 场上死磕无法战胜,原来是个绿题吗哈哈。 考虑到跟序列的顺序无关,直接在值域上做。我们设 \(f_i\) 表示 \(\gcd = i\) 的方案数。那么有 \[f_i = 2^{g_i} - 1 - \sum_{i | d \land i \ne d} f_d \]\(g_i\) 是原序列中是 \(i\) 倍数的个数。那么调和级数 \(O(V\log V)\…...
Laravel APP_DEBUG=true:存在账户信息泄露风险
Laravel APP_DEBUG=true:存在账户信息泄露风险 在 Laravel 开发过程中,APP_DEBUG=true 是一个高频使用的配置 —— 它能在代码报错时显示详细的堆栈跟踪、变量值和配置信息,极大提升调试效率。但鲜少有人意识到,若将开启调试模式的项目部署到生产环境,会直接沦为账户信息泄…...
将当前目录下的所有文件 / 目录完整复制到/tmp目录,且会保留文件的权限、所有者、时间戳等属性
tar cvf - * | (cd /tmp && tar xvfp -)...
C# 操作 DXF 文件指南
C# 操作 DXF 文件主要借助一些专业的库来解析其结构并处理其中的图形数据。 C# 操作 DXF 文件指南 摘要 通过 C# 操作 AutoCAD 导出的 DXF 文件,你可以实现图纸的读取、编辑、创建和转换。本指南将介绍两个主流的开源库 netDxf 和 DXF.NET (IxMilia.Dxf),并提供核心代码示例、…...
在Proxmox中部署Security Onion的安全配置实战
本文详细记录了在Proxmox虚拟化环境中部署Security Onion网络监控系统的完整过程,重点解决了官方文档未涉及的网桥配置问题,包括创建无IP嗅探接口、Linux网桥设置及虚拟机网络设备配置等关键技术环节。在Proxmox中部署Security Onion的安全配置实战 文档说明 Security Onion项…...
报表到 BI:企业数据从展示到决策的进阶之路
报表与BI分析:从数据展示到决策洞察的进化之路 企业数字化转型的浪潮里,“数据驱动决策” 早成共识,可不少企业仍在 “报表” 与 “BI 分析” 的迷雾里打转:是替代,还是互补?为何满墙报表难寻洞察?为何 BI 工具常被业务部门当作 “数据探索的钥匙”?本文从本质差异、能…...
抢先体验智能测试时代,QA必备AI测试工具
敏捷开发模式下的测试挑战 敏捷开发模式下,业务快速迭代,给测试团队带来了前所未有的压力。每一次功能升级或系统迁移,都意味着从功能测试、兼容性测试、性能测试到安全性的大规模回归验证。测试规模成倍增长,而团队人力却往往难以及时扩充。 再加上多设备、多系统环境下频…...
Flink 与Flink可视化平台StreamPark教程(DataStreamApi基本使用)
本文分享自天翼云开发者社区《Flink 与Flink可视化平台StreamPark教程(DataStreamApi基本使用)》,作者:l****n DataStreamApidataStreamApi是一切的基础,处于调度flink程序处理任务的起点。Flink 有非常灵活的分层 API 设计,其中的核心层就是 DataStream/DataSet API。由…...
内部排序-直接插入排序
内部排序-直接插入排序内部排序-直接插入排序 写在前面:参考《数据结构(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$基表丢失…...
从需求出发:教你判断选斑斑还是织信
斑斑低代码以免费、私有化部署优势,适合中小企业;织信则提供高端解决方案,适合中大型企业,两者各有特色。在数字化转型的浪潮中,低代码开发平台正成为企业降本增效的利器。在众多国产平台中,斑斑低代码和织信无疑是受关注的两个选择。本文将从多个维度深入分析这两款平…...