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

排序算法之基础排序:冒泡,选择,插入排序详解

排序算法之基础排序:冒泡、选择、插入排序详解

  • 前言
  • 一、冒泡排序(Bubble Sort)
    • 1.1 算法原理
    • 1.2 代码实现(Python)
    • 1.3 性能分析
  • 二、选择排序(Selection Sort)
    • 2.1 算法原理
    • 2.2 代码实现(Java)
    • 2.3 性能分析
  • 三、插入排序(Insertion Sort)
    • 3.1 算法原理
    • 3.2 代码实现(C++)
    • 3.3 性能分析
  • 四、三种基础排序算法的对比与应用场景
    • 算法对比
    • 应用场景
  • 总结

前言

排序算法是数据处理的基础且重要的组成部分,冒泡排序、选择排序和插入排序作为基础排序算法,虽然在效率上不及一些高级排序算法,但它们原理简单、易于理解,是学习排序算法的入门之选,也是理解更复杂排序算法的基础。本文我将详细介绍这三种基础排序算法的原理、实现代码、性能分析以及实际应用场景。

一、冒泡排序(Bubble Sort)

1.1 算法原理

冒泡排序的基本思想是重复地走访过要排序的数列,一次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个过程就像水中的气泡,较小(或较大)的元素会逐渐 “浮” 到数列的顶端,因此得名冒泡排序。

具体过程如下:

比较相邻的元素。如果第一个比第二个大(升序排序),就交换它们两个。

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡

1.2 代码实现(Python)

def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n - i - 1):if arr[j] > arr[j + 1]:arr[j], arr[j + 1] = arr[j + 1], arr[j]return arr

在上述代码中,外层循环控制排序的轮数,一共需要n轮(n为数组长度)。内层循环用于每一轮中相邻元素的比较和交换,随着外层循环的进行,每一轮比较的次数逐渐减少,因为每一轮结束后,最大的元素已经 “沉” 到了数组末尾。

1.3 性能分析

时间复杂度

最好情况:当数组已经是有序状态时,冒泡排序只需要进行一次遍历,比较n - 1次,不需要交换元素,时间复杂度为 O ( n ) O(n) O(n)

最坏情况:当数组是逆序状态时,需要进行 n ( n − 1 ) / 2 n(n - 1) / 2 n(n1)/2次比较和交换操作,时间复杂度为 O ( n 2 ) O(n^2) O(n2)

平均情况:时间复杂度同样为 O ( n 2 ) O(n^2) O(n2)

空间复杂度:冒泡排序只需要使用常数级别的额外空间来进行元素交换,空间复杂度为 O ( 1 ) O(1) O(1)

稳定性:冒泡排序是一种稳定的排序算法,因为在比较和交换元素时,相同元素的相对顺序不会改变。

二、选择排序(Selection Sort)

2.1 算法原理

选择排序的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

具体步骤如下:

在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕。
选择排序

2.2 代码实现(Java)

public class SelectionSort {public static int[] selectionSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {int minIndex = i;for (int j = i + 1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}return arr;}public static void main(String[] args) {int[] arr = {64, 25, 12, 22, 11};int[] sortedArr = selectionSort(arr);for (int num : sortedArr) {System.out.print(num + " ");}}
}

上述 Java 代码中,外层循环控制排序的轮数,一共需要n - 1轮(n为数组长度)。内层循环用于在每一轮中找到未排序部分的最小元素的索引,然后将其与当前轮起始位置的元素交换。

2.3 性能分析

时间复杂度

最好情况:即使数组已经是有序的,选择排序也需要进行 n ( n − 1 ) / 2 n(n - 1) / 2 n(n1)/2次比较,时间复杂度为 O ( n 2 ) O(n^2) O(n2)

最坏情况:同样需要进行 n ( n − 1 ) / 2 n(n - 1) / 2 n(n1)/2次比较和交换操作,时间复杂度为 O ( n 2 ) O(n^2) O(n2)

平均情况:时间复杂度为 O ( n 2 ) O(n^2) O(n2)

空间复杂度:选择排序只需要使用常数级别的额外空间来进行元素交换,空间复杂度为 O ( 1 ) O(1) O(1)

稳定性:选择排序是不稳定的排序算法,因为在选择最小元素并交换位置时,可能会改变相同元素的相对顺序。例如,数组[5, 5, 3],在排序过程中两个5的相对顺序可能会发生变化。

三、插入排序(Insertion Sort)

3.1 算法原理

插入排序的基本思想是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。其操作过程就像玩扑克牌时整理手中牌的过程,每次从 “牌堆” 中摸一张牌,插入到手中已整理好的牌的合适位置。

具体过程如下:

从第一个元素开始,该元素可以认为已经被排序。

取出下一个元素,在已经排序的元素序列中从后向前扫描。

如果该元素(已排序)大于新元素,将该元素移到下一位置。

重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置。

将新元素插入到该位置后。

重复步骤 2~5,直到所有元素均排序完毕。
插入排序

3.2 代码实现(C++)

#include <iostream>
#include <vector>
using namespace std;vector<int> insertionSort(vector<int> arr) {int n = arr.size();for (int i = 1; i < n; ++i) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j = j - 1;}arr[j + 1] = key;}return arr;
}

在 C++ 代码中,外层循环从数组的第二个元素开始(因为第一个元素默认已排序)。内层循环用于在已排序部分中找到合适的插入位置,将当前元素插入到正确的位置,使得已排序部分始终保持有序。

3.3 性能分析

时间复杂度

最好情况:当数组已经是有序状态时,每插入一个元素只需要比较一次,不需要移动元素,时间复杂度为 O ( n ) O(n) O(n)

最坏情况:当数组是逆序状态时,插入每个元素都需要比较和移动i次(i为当前元素的索引),时间复杂度为 O ( n 2 ) O(n^2) O(n2)

平均情况:时间复杂度为 O ( n 2 ) O(n^2) O(n2)

空间复杂度:插入排序只需要使用常数级别的额外空间来保存当前要插入的元素,空间复杂度为 O ( 1 ) O(1) O(1)

稳定性:插入排序是稳定的排序算法,因为在插入元素时,相同元素的相对顺序不会改变。

四、三种基础排序算法的对比与应用场景

算法对比

排序算法时间复杂度(最好)时间复杂度(最坏)时间复杂度(平均)空间复杂度稳定性
冒泡排序 O ( n ) O(n) O(n) O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( 1 ) O(1) O(1)稳定
选择排序 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( 1 ) O(1) O(1)不稳定
插入排序 O ( n ) O(n) O(n) O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( 1 ) O(1) O(1)稳定

应用场景

冒泡排序:由于其简单易懂,常用于教学场景帮助初学者理解排序算法的基本概念。在数据规模较小且对时间要求不高的情况下,也可以使用。

选择排序:适用于对稳定性要求不高,且数据规模较小的排序场景。比如在一些简单的游戏内数据排序或者资源管理系统中,当数据量不大时可以使用。

插入排序:对于部分有序的数组或者数据量较小的数组,插入排序表现较好。例如,在数据库的某些索引维护操作中,如果数据更新后仍保持部分有序,插入排序可以高效地对新数据进行插入和排序。

总结

冒泡排序、选择排序和插入排序作为基础排序算法,虽然在时间复杂度上都为 O ( n 2 ) O(n^2) O(n2),在处理大规模数据时效率较低,但它们的原理简单,实现容易,是学习排序算法的重要基石。通过理解这三种算法,我们可以更好地掌握排序算法的基本思想,为学习更复杂高效的排序算法(快速排序、归并排序、堆排序等)打下坚实的基础。在下期博客中,我将深入探讨快速排序与归并排序这两种高效排序算法,详细解析它们的实现机制、性能特点以及在不同场景下的应用优势,帮助大家进一步拓宽对排序算法的认知边界。

That’s all, thanks for reading!
创作不易,点赞鼓励;
知识无价,收藏备用;
持续精彩,关注不错过!

相关文章:

排序算法之基础排序:冒泡,选择,插入排序详解

排序算法之基础排序&#xff1a;冒泡、选择、插入排序详解 前言一、冒泡排序&#xff08;Bubble Sort&#xff09;1.1 算法原理1.2 代码实现&#xff08;Python&#xff09;1.3 性能分析 二、选择排序&#xff08;Selection Sort&#xff09;2.1 算法原理2.2 代码实现&#xff…...

mysql集群

mysql双主keepalivedhaproxy 一、集群作用 实现高可用及负载均衡。 二、示例 1.实验环境 101 mysql01102 mysql01103 haproxy01keepalived01104 haproxy02keepalived02105 client2.各主机改名并关闭防火墙 101 mysql01102 mysql02103 haproxy01104 haproxy02105 clientsyst…...

【嵌入式开发-RGB 全彩 LED】

嵌入式开发-RGB 全彩 LED ■ RGB 全彩 LED简介■ 电路设计■ ■ RGB 全彩 LED简介 RGB 全彩 LED 模块显示不同的颜色。 ■ 电路设计 全彩 LED 使用 PA5、 蓝色&#xff08;B&#xff09; TIM2_CHN3 PA1、 绿色&#xff08;G&#xff09;TIM2_CHN2 PA2、 红色&#xff08;R&am…...

网络安全-等级保护(等保) 2-6 GB/T 36958—2018 《信息安全技术 网络安全等级保护安全管理中心技术要求》-2018-12-28 发布【现行】

################################################################################ GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》明确了安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、…...

几个正整数常用的位运算操作

位运算在高性能计算、资源敏感型场景&#xff08;如嵌入式系统&#xff09;、特定算法&#xff08;加密、压缩&#xff09;中具有不可替代的优势。合理使用位运算可以显著提升代码效率和资源利用率。 1. 判断一个正整数是否为8的倍数 bool is_multiple_of_eight(int n) {if (…...

消息队列(MQ)在项目中的使用场景详解【附开发实战思路】

在开发中&#xff0c;很多人一开始对消息队列&#xff08;MQ&#xff09;的认识仅限于“异步处理”&#xff0c;但随着项目复杂度提升&#xff0c;我们会发现 MQ 不仅能异步处理任务&#xff0c;还能解耦系统、削峰限流&#xff0c;甚至提高整体架构的稳定性和扩展性。 这篇文…...

基于MATLAB-GUI图形界面的数字图像处理

基于MATLAB GUI的数字图像处理系统实现方案&#xff0c;包含常见图像处理功能。代码分为两部分&#xff1a;GUI界面设计和回调函数实现。 %% 第一部分&#xff1a;创建GUI界面 (使用GUIDE) % 1. 打开GUIDE: guide % 2. 创建新GUI&#xff0c;添加以下控件&#xff1a; % - …...

C语言水仙花数

水仙花数&#xff08;Narcissistic Number&#xff09;也被称为自幂数&#xff0c;是数学中的一种特殊三位数&#xff0c;属于自幂数的一种类型。它的定义为&#xff1a;一个三位数&#xff0c;其各位数字的立方和等于该数本身。 具体定义与计算方式条件&#xff1a; 设一个三位…...

前k个高频元素

pair<int int>&#xff1a;用于存储两个数字。&#xff08;pair<int string>用于存储一个整数和一个字符串&#xff09; const pair<int int>&#xff1a;表示pair对象是常量&#xff0c;一旦初始化以后&#xff0c;其内部的两个成员值都不能被修改。 bool…...

人工智能与智能的底色都是哲学

人工智能与智能的底色都是哲学&#xff0c;因为哲学为它们提供了对“智能”本质的追问与思考。哲学自古以来便对人类智能、思维与意识进行深入探讨&#xff0c;为理解智能的结构和功能奠定了基础。同时&#xff0c;人工智能的发展也引发了诸多哲学问题&#xff0c;如伦理道德、…...

能碳管理系统:助力企业实现“双碳“目标

在全球气候治理和绿色低碳发展的大背景下&#xff0c;能碳管理系统正成为企业应对气候变化、实现"碳达峰、碳中和"战略目标的核心工具。这一系统通过数字化手段将能源管理与碳排放管控深度融合&#xff0c;为企业低碳转型提供全方位支持。 一、系统架构与核心技术 …...

开源鸿蒙北向源码开发: 5.0kit化相关sdk编译

5.0kit化可以在编译系统sdk时添加,将你的kit文件加入编译使得最终生成的sdk包含kits文件 修改编译脚本 修改build仓里面的构建脚本文件,添加kits目录脚本命令 社区的build脚本已经有kits编译功能了,只需要把你的kits目录新增的kit拷贝到社区仓interface仓了,和社区的都一起编…...

多通道电源管理芯片在分布式能源系统中的优化策略

摘要&#xff1a;随着分布式能源系统的广泛应用&#xff0c;对电源管理芯片的性能要求日益提升。本文深入探讨了多通道电源管理芯片在分布式能源系统中的优化策略&#xff0c;以国科安芯的ASP4644芯片为例&#xff0c;从电气特性、工作模式、热管理、可靠性设计以及系统集成为主…...

IEEE 列表会议第五届机器人、自动化与智能控制国际会议

会议地点&#xff1a;中国 成都 会议官网&#xff1a;ICRAIC 主办单位&#xff1a;成都理工大学 协办单位&#xff1a;成都大学 早鸟截稿&#xff1a;2025年7月15日 截稿时间&#xff1a;2025年8月20日 出版信息&#xff1a;IEEE出版&EI数据库 会议时间&#xff1a…...

GitHub 趋势日报 (2025年05月15日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1TapXWorld/ChinaTextbookPDF教材。⭐ 6685⭐ 15287Roff2xming521/WeClone&…...

Java 并发编程归纳总结(可重入锁 | JMM | synchronized 实现原理)

1、锁的可重入 一个不可重入的锁&#xff0c;抢占该锁的方法递归调用自己&#xff0c;或者两个持有该锁的方法之间发生调用&#xff0c;都会发生死锁。以之前实现的显式独占锁为例&#xff0c;在递归调用时会发生死锁&#xff1a; public class MyLock implements Lock {/* 仅…...

Git 笔记

设置Git的user name和email $ git config --global user.name "bread" $ git config --global user.email "1234567890qq.com"因为Git是分布式版本控制系统&#xff0c;所以需要填写用户名和邮箱作为一个标识。git config --global 参数&#xff0c;有了这…...

蒟蒻编程日志

ORZ &#xff08;用于记录你这个“人”是不是真的&#xff0c;也就是说CSDN的流量是否属合适&#xff09; 2025/4/14 21:25 开坑 前言 2024/10/26&#xff1a;CSP-J 260pts&#xff0c;CSP-S 45pts。 2025/3/1&#xff1a;%你赛 180pts rk34 寄&#xff01;这就是不认真的…...

深入GoFrame框架:GToken的优势、实践与踩坑经验分享

一、引言 近年来&#xff0c;Go语言凭借其简洁的语法、高并发性能和强大的标准库&#xff0c;在后端开发领域迅速崛起。从微服务到企业级应用&#xff0c;Go的生态圈正在蓬勃发展&#xff0c;吸引了越来越多的开发者投入其中。在这个生态中&#xff0c;框架的选择往往决定了项…...

MODBUS RTU调试助手使用方法详解

一、软件简介 485调试助手是一款常用的串口通信调试工具&#xff0c;专门用于RS-485总线设备的测试、调试和通信监控。它支持多种串口参数设置&#xff0c;提供数据收发功能&#xff0c;是工业现场调试的必备工具之一。 二、软件安装与启动 1. 系统要求 Windows 7/10/11操作…...

【专利信息服务平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

我用 Appuploader绕过 Mac,成功把 iOS 应用上线了 App Store

我以前总觉得&#xff0c;iOS 上架是 macOS Xcode 专属的领域。直到最近项目必须要上架 iOS&#xff0c;团队却没人用 Mac&#xff0c;只能临时组建了一套“跨平台上架流程”。 这篇文章记录我这个“非典型 iOS 开发者”是如何绕开传统 Xcode 流程&#xff0c;借助一系列工具…...

Mac上安装运行SynthTIGER

1. 确保已安装 Python 环境 SynthTIGER 需要 Python 3.6。如果你的 Mac 没有安装 Python&#xff1a; 推荐通过 Homebrew 安装&#xff1a; brew install python 或从 Python 官网 下载安装。 验证安装&#xff1a; python3 --version pip3 --version 2. 安装 SynthTIGER…...

从代码学习深度学习 - 实战Kaggle比赛:狗的品种识别(ImageNet Dogs)PyTorch版

文章目录 前言1. 获取和整理数据集1.1 读取标签1.2 整理数据集&#xff1a;划分训练集和验证集1.3 整理测试集1.4 执行数据重组 2. 图像增广3. 读取数据集3.1 创建Dataset实例3.2 创建DataLoader实例 4. 微调预训练模型4.1 定义网络结构4.2 定义损失函数和评估函数 5. 定义训练…...

翼兴消防监控 – 大数据可视化HTML源码

概述 在当今数据驱动的时代&#xff0c;大数据可视化已成为各行各业不可或缺的工具。幽络源今天为大家带来一款基于ECharts的消防监控大屏HTML源码&#xff0c;帮助开发者快速搭建专业级数据展示界面。这款源码设计简洁大方&#xff0c;功能完善&#xff0c;适合各类监控场景使…...

搭建运行若依微服务版本ruoyi-cloud最新教程

搭建运行若依微服务版本ruoyi-cloud 一、环境准备 JDK > 1.8MySQL > 5.7Maven > 3.0Node > 12Redis > 3 二、后端 2.1数据库准备 在navicat上创建数据库ry-seata、ry-config、ry-cloud运行SQL文件ry_20250425.sql、ry_config_20250224.sql、ry_seata_2021012…...

火山引擎AI大模型

火山引擎的AI大模型&#xff08;如**“云雀”大模型**&#xff09;作为字节跳动旗下的核心技术产品&#xff0c;在性能、应用场景和技术生态上表现较为突出&#xff0c;尤其在字节自身业务&#xff08;如抖音、TikTok等&#xff09;的打磨下&#xff0c;具备较强的实用性和行业…...

isaacgym环境安装

1. 系统环境 操作系统&#xff1a;Ubuntu 18.04.6 LTSGPU&#xff1a;NVIDIA TITAN RTXDriver 版本: 510.108.03CUDA 版本&#xff1a;11.6 2. conda安装以及环境安装 略过&#xff08;参考内容&#xff1a;https://github.com/unitreerobotics/unitree_rl_gym/blob/main/doc…...

使用Mathematica制作Lorenz吸引子的轨道追踪视频

Lorenz奇异吸引子是混沌理论中最早被发现和研究的吸引子之一&#xff0c;它由Edward Lorenz在1963年研究确定性非周期流时提出。Lorenz吸引子以其独特的"蝴蝶"形状而闻名&#xff0c;是混沌系统和非线性动力学的经典例子。 L NDSolveValue[{x[t] -3 (x[t] - y[t]),…...

基于matlab的D2D 功率控制仿真

基于MATLAB的D2D&#xff08;Device-to-Device&#xff09;功率控制仿真示例&#xff0c;包含系统建模、功率控制算法实现和性能分析。该仿真以蜂窝网络为背景&#xff0c;重点关注D2D用户间的干扰管理和功率优化。 1. 系统模型与参数设置​ clc; clear; close all;%% 参数配置…...

将three.js场景保存成图片

使用html2canvas或者canvas.toDataURL&#xff0c;直接转会发现场景是空白的 解决方案&#xff1a;在转图片之前先渲染一下场景&#xff0c;就不会导致因为渲染问题的闪白了 1. 获取dom let canvas: any renderer.domElement;2. 转图片并下载 renderer.render(scene,camera…...

Java注解详解:从入门到实战应用篇

1. 引言 Java注解&#xff08;Annotation&#xff09;是JDK 5.0引入的一种元数据机制&#xff0c;用于为代码提供附加信息。它广泛应用于框架开发、代码生成、编译检查等领域。本文将从基础到实战&#xff0c;全面解析Java注解的核心概念和使用场景。 2. 注解基础概念 2.1 什…...

在哪一个终端下运行有影响吗?pip install pillow

在哪一个终端下运行有影响吗&#xff1f;pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn&#xff0c;需要切换到主目录吗&#xff1f; 1. 是否需要切换目录&#xff1f; 不需要切换目录 pip install 安装的包会存放…...

Java与C/C++跨平台互操作深度解析:Project Panama技术实战

简介 Project Panama是Java语言历史上最重要的互操作性增强项目之一,它通过Foreign Function & Memory API彻底改变了Java与本地代码交互的方式。相比传统的JNI方法,Panama提供了更安全、更高效、更易用的API,使得Java程序能够直接调用C/C++函数并操作外部内存,而无需…...

亲缘半相合供者

https://health.baidu.com/m/detail/ar_3602431741690417249 骨髓移植&#xff1a;亲缘半相合供者的经历分享 从去年八月开始&#xff0c;我妈妈被诊断为急性髓系白血病M4。经过一系列的准备和手术&#xff0c;昨天上午我终于完成了骨髓采集。现在&#xff0c;我的干细胞已经…...

《解锁数字藏品交易系统的底层密码:区块链架构抉择》

区块链&#xff0c;凭借其去中心化、不可篡改、可追溯等特性&#xff0c;成为数字藏品交易系统的核心支撑技术。不同的区块链底层架构&#xff0c;就像各具特色的建筑材料与蓝图&#xff0c;拥有独特的性能、特点以及应用场景。在搭建数字藏品交易系统时&#xff0c;必须深入剖…...

STM32F407VET6的HAL库使用CRC校验的思路

CRC校验在数据传输快&#xff0c;且量大的时候使用。 步骤实现&#xff1a; CubeMX配置 c // 在CubeMX中启用CRC模块 // AHB总线时钟自动启用 HAL库代码 c // 初始化&#xff08;main函数中&#xff09; CRC_HandleTypeDef hcrc; hcrc.Instance CRC; hcrc.Init.Default…...

TDuckX 2.6 正式发布|API 能力开放,核心表单逻辑重构,多项实用功能上线。

大家好&#xff0c;TDuckX 2.6 已正式发布。 本次更新以可集成性提升、数据处理能力增强和交互体验优化为核心&#xff0c;新增了包括 新增OpenAPI 模块、表单数据批量修改、字段导出分列 等多个面向开发者和实际业务落地场景的功能。 我们也重构了部分底层逻辑模块&#xff…...

智慧换热站全流程可视化管理

通过图扑 HT 实现换热站全方位数字孪生。对换热机组、管道阀门等设备精细建模&#xff0c;集成温度、流量、能耗等运行数据。在可视化界面中&#xff0c;设备状态实时呈现&#xff0c;异常即时预警。助力运维人员精准管理&#xff0c;优化调控策略&#xff0c;提升换热站运行效…...

框架的源码理解——V3中的ref和reactive

最近在研究各个框架的源码&#xff0c;从源码角度去理解 vue3 的 reactive 和 ref API&#xff0c;记录下研究的成果 reactive 首先&#xff0c;reactive() 的参数必须是一个对象&#xff0c;返回值是一个 Proxy 对象&#xff0c;具有响应性。如果参数不是对象类型&#xff0…...

一台入网的电脑有6要素, 机器名,mac,ip,俺码,网关,dns,分别有什么作用

一台入网的电脑需要配置的 六大网络要素&#xff08;机器名、MAC地址、IP地址、子网掩码、网关、DNS&#xff09;各自承担不同的关键作用&#xff0c;共同确保设备能正确通信和访问网络资源。以下是它们的详细功能解析&#xff1a; 1. 机器名&#xff08;主机名&#xff09; 作…...

LED点阵屏模块

目录 1.LED点阵屏介绍 2.显示原理 3.74HC595 4.C51的sfr、sbit 5.LED点阵屏显示图形代码 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 第五步&#xff1a; 第六步&#xff1a; 最终代码&#xff1a; 模块&#xff1a; main.c …...

服务器性能参数分析基础:磁盘-CPU-内存

在Linux系统中&#xff0c;"挂载"&#xff08;Mount&#xff09;是指将物理存储设备&#xff08;如磁盘分区&#xff09;或逻辑存储卷&#xff08;如LVM、网络存储&#xff09;关联到文件系统目录树的特定路径节点&#xff08;即挂载点&#xff09;&#xff0c;使得该…...

MoonBit 新特性:Virtual Package 虚拟包机制

Moonbit 最近新增了一项特性&#xff1a;virtual package。通过将一个 package 声明为虚拟包&#xff0c;定义好一套接口&#xff08;通过 .mbti 文件声明&#xff09;&#xff0c;用户可选择具体使用哪一份实现&#xff0c;如不指定则使用该虚拟包的默认实现。通过这项特性&am…...

[特殊字符][特殊字符]知识库PHP版 | ChatMoneyAI宝塔面板Docker多部署

官方文档&#x1f4b0;&#x1f4da;知识库PHP版 | ChatMoneyAI docker-compose2.yml 修改文件名 ports:- "181:80" #【180】为Nginx挂载主机的端口 fastcgi_pass php1:9000; #名称修改php1 container_name: nginx1 #Nginx容器名修改 container_name: php1 #P…...

来一个复古的技术FTP

背景 10年前的老代码&#xff0c;需要升级springboot框架&#xff0c;在升级过程中&#xff0c;测试业务流程里&#xff0c;有FTP的下载业务&#xff0c;不管测试环境如何测试&#xff0c;都没有成功&#xff0c;最后只能自己搭建一个FTP服务器&#xff0c;写一个ftp-demo来测试…...

ShardingSphere:查询报错:Actual table `数据源名称.表名` is not in table rule configuration

目录 简介异常信息排查原因解决 简介 1、使用ShardingSphere框架&#xff0c;版本为5.2.1 <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core</artifactId><version>5.2.1</version>…...

内部检测实验室数字化转型新路径 质检LIMS系统如何实现合规、效率、资质三重突破?

在高质量发展成为主旋律的今天&#xff0c;内部检测实验室作为企业质量管控的 “心脏”&#xff0c;正面临着合规标准升级、检测任务激增、设备管理复杂等多重挑战。传统管理模式下&#xff0c;数据追溯难、人员效率低、资质评审周期长等问题&#xff0c;成为制约实验室发展的核…...

PyTorch 的 F.scaled_dot_product_attention 返回Nan

“为什么 PyTorch 的 scaled_dot_product_attention 会输出 NaN&#xff1f;如何正确构造 Attention Mask” 引言&#xff1a;看似正常的 mask&#xff0c;为什么会引发 NaN&#xff1f; 在使用 F.scaled_dot_product_attention 构建跨模态或多源注意力时&#xff0c;我们常通…...

MySQL的触发器

本章了解一下即可&#xff0c;并不是很难&#xff0c;大家加油&#xff01;&#xff01;&#xff01; 触发器实际上是多表关联的一个操作&#xff0c;无需调用&#xff0c;是一个自动的过程&#xff0c;当对数据库表中的数据执行DML操作时自动触发这个SQL片段的执行&#xff0…...