【Python 算法零基础 4.排序 ③ 插入排序】
目录
一、引言
二、算法思想
三、算法分析
1.时间复杂度
2.空间复杂度
3.算法的优点和缺点
① 算法的优点
② 算法的缺点
四、实战练习
1491. 去掉最低工资和最高工资后的工资平均值
思路与算法
① 插入排序算法 (insertSort 方法)
Ⅰ、初始化
Ⅱ、遍历未排序元素
Ⅲ、元素后移
② 计算平均工资 (average 方法)
Ⅰ、排序
Ⅱ、切片求和:
1619. 删除某些元素后的数组均值
思路与算法
① 插入排序算法 (insertSort 方法)
Ⅰ、初始化
Ⅱ、遍历未排序元素
Ⅲ、元素后移
② 计算截断均值 (trimMean 方法)
Ⅰ、排序数组
Ⅱ、计算截断比例
Ⅲ、切片求和
1984. 学生分数的最小差值
思路与算法
① 插入排序算法 (insertSort 方法)
Ⅰ、初始化
Ⅱ、遍历未排序元素
Ⅲ、元素后移
② 计算最小分数 (minimumDifference 方法)
Ⅰ、排序数组
Ⅱ、初始化结果
Ⅲ、遍历所有可能的子数组
Ⅳ、返回结果
接受平庸不是逃避,别让欲望击垮勇敢的你
—— 25.5.20
选择排序回顾
① 初始化:从未排序序列开始,初始时整个数组都是未排序的。
② 寻找最小值:遍历未排序部分的所有元素,找到其中的最小值。使用变量min
记录最小值的索引,初始时假设当前未排序部分的第一个元素是最小的。
③ 交换元素:将找到的最小值与未排序部分的第一个元素交换位置。此时,未排序部分的第一个元素成为已排序序列的一部分。
④ 重复步骤 2-3:缩小未排序部分的范围(从下一个元素开始),重复寻找最小值并交换的过程,直到整个数组排序完成。
def selection_sort(arr: List):n = len(arr)for i in range(n):min = ifor j in range(i+1, n):if arr[min] > arr[j]:arr[min], arr[j] = arr[j], arr[min]return arr
冒泡排序回顾
① 初始化:获取数组长度 n
。
② 外层循环(控制轮数):遍历 i
从 0
到 n-1
,共进行 n
轮。
作用:每轮确定一个最大元素的位置(第 i
轮确定倒数第 i+1
大的元素)。
③ 内层循环(相邻元素比较):对于每轮 i
,遍历 j
从 0
到 n-i-1
:比较 arr[j]
和 arr[j+1]
。若 arr[j] > arr[j+1]
,则交换两者位置。
作用:将当前未排序部分的最大元素逐步交换到右侧。
④ 终止条件:当 i
达到 n-1
时,所有元素已排序完成。
def bubble_sort(arr):n = len(arr)# 遍历所有数组元素for i in range(n):# 最后i个元素已经就位,无需再比较for j in range(0, n - i - 1):# 遍历数组从0到n-i-1# 交换元素如果当前元素大于下一个元素if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arr
一、引言
插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入,直到整个数组有序。
二、算法思想
具体的算法步骤如下:
① 从第一个元素开始,将其视为已排序部分。
② 取出下一个元素,与已排序部分的元素进行比较。
③ 如果该元素小于已排序部分的最后一个元素,则将其插入到已排序部分的适当位置。
④ 重复步骤 ② 和 ③,直到整个数组都被排序
首先,需要将第二个元素和第一个元素进行比较,如果前者 ≤ 后者,则将后者进行向后移动,前者则执行插入
进行第二轮比较时,即第三个元素和第二、第一个元素比较,直到前三个元素都保持有序
最后,经过一定轮次的比较和移动之后,一定可以保证所有元素都是按照升序排列的
三、算法分析
1.时间复杂度
我们假设 「比较」和「移动」 的时间复杂度为 O(1)。
「插入排序」 中有两个嵌套循环:
外循环正好运行 n一1 次迭代。但内部循环运行变得越来越短:
当i = 1,内层循环1次「比较」操作。
当i = 2,内层循环 2次「比较」操作。
当i = 3,内层循环3次「比较」操作。
……
当i = n - 2,内层循环n-2次「比较」操作,
当i = n-1,内层循环n-1次「比较」操作。
因此,总「比较」次数如下:1+2+...+(n-1) = n(n-1)/2。总的时间复杂度为:O(n^2)。
2.空间复杂度
由于算法在执行过程中,只有「移动」变量时候,需要事先将变量存入临时变量x,而其它没有采用任何的额外空间,所以空间复杂度为 O(1)。
3.算法的优点和缺点
① 算法的优点
1.简单易懂,易于实现。
2.适用于小型数组或基本有序的数组。
3.稳定性好,不会改变相等元素的相对顺序。
② 算法的缺点
1.对于大型无序数组,效率较低。
2.不适合大规模数据排序。
四、实战练习
1491. 去掉最低工资和最高工资后的工资平均值
给你一个整数数组
salary
,数组里每个数都是 唯一 的,其中salary[i]
是第i
个员工的工资。请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值。
示例 1:
输入:salary = [4000,3000,1000,2000] 输出:2500.00000 解释:最低工资和最高工资分别是 1000 和 4000 。 去掉最低工资和最高工资以后的平均工资是 (2000+3000)/2= 2500示例 2:
输入:salary = [1000,2000,3000] 输出:2000.00000 解释:最低工资和最高工资分别是 1000 和 3000 。 去掉最低工资和最高工资以后的平均工资是 (2000)/1= 2000示例 3:
输入:salary = [6000,5000,4000,3000,2000,1000] 输出:3500.00000示例 4:
输入:salary = [8000,9000,2000,3000,6000,1000] 输出:4750.00000提示:
3 <= salary.length <= 100
10^3 <= salary[i] <= 10^6
salary[i]
是唯一的。- 与真实值误差在
10^-5
以内的结果都将视为正确答案。
思路与算法
① 插入排序算法 (insertSort
方法)
Ⅰ、初始化
获取数组长度 n
。从索引 1
开始遍历(因为索引 0
单独作为已排序部分)。
Ⅱ、遍历未排序元素
对于每个索引 i
(从 1
到 n-1
):保存当前元素 current = arr[i]
。
设置指针 j = i-1
,指向已排序部分的最后一个元素。
Ⅲ、元素后移
循环条件:当 j >= 0
且 arr[j] > current
时:将 arr[j]
后移一位至 arr[j+1]
。j
减 1,继续向前检查。
插入当前元素:当循环结束时,j+1
即为 current
的正确位置,将其插入。
② 计算平均工资 (average
方法)
Ⅰ、排序
调用 insertSort
对工资数组 salary
进行升序排序。
Ⅱ、切片求和:
截取数组的中间部分(排除第一个和最后一个元素):salary[1:-1]
。
计算切片的总和,并除以元素个数 len(salary) - 2
class Solution:def insertSort(self, arr: List):n = len(arr)# 从第二个元素开始遍历,因为第一个元素已经是有序的for i in range(1, n):# 当前要插入的元素current = arr[i]# 已排序部分的最后一个元素的索引j = i - 1# 从后向前扫描已排序部分,将比current大的元素向后移动while j >= 0 and arr[j] > current:arr[j + 1] = arr[j] # 元素后移j -= 1# 插入当前元素到正确位置arr[j + 1] = currentreturn arrdef average(self, salary: List[int]) -> float:self.insertSort(salary)return sum(salary[1: -1]) / (len(salary) - 2)
1619. 删除某些元素后的数组均值
给你一个整数数组
arr
,请你删除最小5%
的数字和最大5%
的数字后,剩余数字的平均值。与 标准答案 误差在
10-5
的结果都被视为正确结果。示例 1:
输入:arr = [1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3] 输出:2.00000 解释:删除数组中最大和最小的元素后,所有元素都等于 2,所以平均值为 2 。示例 2:
输入:arr = [6,2,7,5,1,2,0,3,10,2,5,0,5,5,0,8,7,6,8,0] 输出:4.00000示例 3:
输入:arr = [6,0,7,0,7,5,7,8,3,4,0,7,8,1,6,8,1,1,2,4,8,1,9,5,4,3,8,5,10,8,6,6,1,0,6,10,8,2,3,4] 输出:4.77778示例 4:
输入:arr = [9,7,8,7,7,8,4,4,6,8,8,7,6,8,8,9,2,6,0,0,1,10,8,6,3,3,5,1,10,9,0,7,10,0,10,4,1,10,6,9,3,6,0,0,2,7,0,6,7,2,9,7,7,3,0,1,6,1,10,3] 输出:5.27778示例 5:
输入:arr = [4,8,4,10,0,7,1,3,7,8,8,3,4,1,6,2,1,1,8,0,9,8,0,3,9,10,3,10,1,10,7,3,2,1,4,9,10,7,6,4,0,8,5,1,2,1,6,2,5,0,7,10,9,10,3,7,10,5,8,5,7,6,7,6,10,9,5,10,5,5,7,2,10,7,7,8,2,0,1,1] 输出:5.29167提示:
20 <= arr.length <= 1000
arr.length
是20
的 倍数0 <= arr[i] <= 105
思路与算法
① 插入排序算法 (insertSort
方法)
Ⅰ、初始化
获取数组长度 n
。从索引 1
开始遍历(因为索引 0
单独作为已排序部分)。
Ⅱ、遍历未排序元素
对于每个索引 i
(从 1
到 n-1
):保存当前元素 current = arr[i]
。
设置指针 j = i-1
,指向已排序部分的最后一个元素。
Ⅲ、元素后移
循环条件:当 j >= 0
且 arr[j] > current
时:将 arr[j]
后移一位至 arr[j+1]
。j
减 1,继续向前检查。
插入当前元素:当循环结束时,j+1
即为 current
的正确位置,将其插入。
② 计算截断均值 (trimMean
方法)
Ⅰ、排序数组
调用 insertSort
对数组进行升序排序。
Ⅱ、计算截断比例
数组长度为 n
,则需去除的元素数量为 s = n // 20
(即 5%)。
Ⅲ、切片求和
截取数组中间的部分:arr[s:-s]
,即去除前 s
个和后 s
个元素。
计算切片的总和,并除以剩余元素的数量(即 0.9 * n
,因为去除了 10% 的元素)。
class Solution:def insertSort(self, arr: List):n = len(arr)# 从第二个元素开始遍历,因为第一个元素已经是有序的for i in range(1, n):# 当前要插入的元素current = arr[i]# 已排序部分的最后一个元素的索引j = i - 1# 从后向前扫描已排序部分,将比current大的元素向后移动while j >= 0 and arr[j] > current:arr[j + 1] = arr[j] # 元素后移j -= 1# 插入当前元素到正确位置arr[j + 1] = currentreturn arrdef trimMean(self, arr: List[int]) -> float:arr = self.insertSort(arr)n = len(arr)s = n // 20return sum(arr[s:-s]) / (0.9 * n)
1984. 学生分数的最小差值
给你一个 下标从 0 开始 的整数数组
nums
,其中nums[i]
表示第i
名学生的分数。另给你一个整数k
。从数组中选出任意
k
名学生的分数,使这k
个分数间 最高分 和 最低分 的 差值 达到 最小化 。返回可能的 最小差值 。
示例 1:
输入:nums = [90], k = 1 输出:0 解释:选出 1 名学生的分数,仅有 1 种方法: - [90] 最高分和最低分之间的差值是 90 - 90 = 0 可能的最小差值是 0示例 2:
输入:nums = [9,4,1,7], k = 2 输出:2 解释:选出 2 名学生的分数,有 6 种方法: - [9,4,1,7] 最高分和最低分之间的差值是 9 - 4 = 5 - [9,4,1,7] 最高分和最低分之间的差值是 9 - 1 = 8 - [9,4,1,7] 最高分和最低分之间的差值是 9 - 7 = 2 - [9,4,1,7] 最高分和最低分之间的差值是 4 - 1 = 3 - [9,4,1,7] 最高分和最低分之间的差值是 7 - 4 = 3 - [9,4,1,7] 最高分和最低分之间的差值是 7 - 1 = 6 可能的最小差值是 2提示:
1 <= k <= nums.length <= 1000
0 <= nums[i] <= 105
思路与算法
① 插入排序算法 (insertSort
方法)
Ⅰ、初始化
获取数组长度 n
。从索引 1
开始遍历(因为索引 0
单独作为已排序部分)。
Ⅱ、遍历未排序元素
对于每个索引 i
(从 1
到 n-1
):保存当前元素 current = arr[i]
。
设置指针 j = i-1
,指向已排序部分的最后一个元素。
Ⅲ、元素后移
循环条件:当 j >= 0
且 arr[j] > current
时:将 arr[j]
后移一位至 arr[j+1]
。j
减 1,继续向前检查。
插入当前元素:当循环结束时,j+1
即为 current
的正确位置,将其插入。
② 计算最小分数 (minimumDifference
方法)
Ⅰ、排序数组
调用 insertSort
对数组进行升序排序。
Ⅱ、初始化结果
设置初始结果 res
为 100000
(根据题目约束,这是可能的最大值)。
Ⅲ、遍历所有可能的子数组
对于每个起始索引 i
(范围 0
到 n - k
):计算对应的结束索引 r = i + k - 1
。计算子数组 nums[l:r+1]
的分数(即 nums[r] - nums[l]
)。更新 res
为当前分数与历史最小分数的较小值。
Ⅳ、返回结果
遍历结束后,res
即为最小分数。
class Solution:def insertSort(self, arr: List):n = len(arr)# 从第二个元素开始遍历,因为第一个元素已经是有序的for i in range(1, n):# 当前要插入的元素current = arr[i]# 已排序部分的最后一个元素的索引j = i - 1# 从后向前扫描已排序部分,将比current大的元素向后移动while j >= 0 and arr[j] > current:arr[j + 1] = arr[j] # 元素后移j -= 1# 插入当前元素到正确位置arr[j + 1] = currentreturn arrdef minimumDifference(self, nums: List[int], k: int) -> int:self.insertSort(nums)# 题目中给的最大值是10 ^ 5n = len(nums)res = 100000for i in range(n + 1 - k):l = ir = i + k -1res = min(res, nums[r] - nums[l])return res
相关文章:

【Python 算法零基础 4.排序 ③ 插入排序】
目录 一、引言 二、算法思想 三、算法分析 1.时间复杂度 2.空间复杂度 3.算法的优点和缺点 ① 算法的优点 ② 算法的缺点 四、实战练习 1491. 去掉最低工资和最高工资后的工资平均值 思路与算法 ① 插入排序算法 (insertSort 方法) Ⅰ、初始化 Ⅱ、遍历未排序元素 Ⅲ、元素后移…...

LangGraph实现多智能体的方法
生活中我们常常需要同时处理多个任务,比如预订旅行时,既要订机票,又要订酒店。如果有一个智能助手能同时帮你搞定这些事情,那该有多方便啊!LangGraph的多智能体系统就能做到这一点。它就像一个超级助手团队,…...
wordpress主题开发中常用的12个模板文件
在WordPress主题开发中,有多种常用的模板文件,它们负责控制网站不同部分的显示内容和布局,以下是一些常见的模板文件: 1.index.php 这是WordPress主题的核心模板文件。当没有其他更具体的模板文件匹配当前页面时,Wor…...

聚铭安全管家平台2.0重磅发布——大模型智驱高效降本新方向
【聚铭安全管家平台2.0正式发布】在数字化安全威胁日益严峻的背景下,聚铭网络创新推出安全管家平台2.0,首创"云端智能区域中台本地终端"三级协同架构,深度融合AI安全大模型技术,实现威胁智能研判与自动化响应。该平台通…...
Android singleTop启动模式开启新页面
在Android开发中,Activity的启动模式(Launch Mode)对应用的行为和用户体验影响非常大。其中,singleTop是一种常见的启动模式,但它常常让开发者困惑:当一个Activity设置为singleTop时,如何才能重新打开一个新的页面(实例)? 本文将详细解析singleTop启动模式的机制,为…...

使用注解动态映射:根据实体List列表动态生成Excel文件
我们一般通过POI来生成对应的Excel文件,绝大多数情况是需要手动编写单元格内容,然后顺序填充值,今天我们将动态根据实体来生成Excel表头,同时自动填充内容。 文章目录 1. 定义注解2. 实体类应用注解3. 动态导出工具类 1. 定义注解…...

基于cornerstone3D的dicom影像浏览器 第二十一章 显示DICOM TAGS
系列文章目录 第一章 下载源码 运行cornerstone3D example 第二章 修改示例crosshairs的图像源 第三章 vitevue3cornerstonejs项目创建 第四章 加载本地文件夹中的dicom文件并归档 第五章 dicom文件生成png,显示检查栏,序列栏 第六章 stack viewport 显…...

【循环位运算——uint32,DP】
题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; using uint unsigned;const int N 1010;ll f[N][N]; uint a[N]; int n, m;int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;for(int i 1; i < n; i)cin …...

贪心介绍 LeetCode 455.分发饼干 LeetCode 376. 摆动序列 LeetCode 53. 最大子序和
贪心介绍 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 eg: 有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿? 指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就…...
算法学习笔记·数学·快速幂
题目:(AcWing) 给定 n 组 ai,bi,pi,对于每组数据,求出 aibimodpi 的值。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含三个整数 ai,bi,pi。 输出格式 对于每组数据,输出一个结果,表示 abiimodpi 的值。 每…...

Postgresql 数据库体系架构
1 postgresql 软件目录 rootu24-pg-110:~# tree -L 1 /usr/local/postgresql-17/ /usr/local/postgresql-17/ ├── bin #可执行二进制文件 ├── include ├── lib └── share 2 数据库目录及文件 #目录结构 base --每个数据库的子目录 global --数据库集簇范…...
[创业之路-377]:企业战略管理案例分析-战略制定/设计-市场洞察“五看”:看宏观之社会发展趋势:数字化、智能化、个性化的趋势对初创公司的战略机会
数字化、智能化、个性化趋势为初创公司带来了捕捉长尾需求、提升运营效率、创新商业模式等战略机会,具体分析如下: 一、数字化趋势带来的战略机会 捕捉长尾需求:数字化技术能够帮助初创公司更好地捕捉市场中的长尾需求,满足那些…...

Vue框架1(vue搭建方式1,vue指令,vue实例生命周期)
一.VUE vue概述(vue.js) vue是前端JavaScript框架,对JavaScript进行封装,是一套用于构建用户界面的渐进式框架.vue的核心只关注图示层,不仅易上手,还便于与第三方库或既有的项目整合. vue.js和Angular.js,React.js一起,并称为前端三大主流框架 注意: 在此初步学习的是vue…...
分布式系统核心技术全解析
目录 分布式系统的本质 分布式系统的核心特点 分布式系统的典型应用场景 分布式系统的挑战 CAP理论 一、CAP 三要素定义 1. 一致性(Consistency) 2. 可用性(Availability) 3. 分区容错性(Partition Tolerance…...

skywalking 10.2 源码编译
1.源码下载 Downloads | Apache SkyWalking 选择 SkyWalking APM 最新版下载, 下载后,在本地解压。 2.Idea加载工程 2.1 根目录pom文件删除checkstyle 插件 后续做二开时避免代码风格校验报错 2.2 删除apm-webapp 工程中 frontend-maven-plugin插件…...

C++ --- string
C --- string 简介1、构造函数2、迭代器(主流的遍历方式)2.1字符串经典遍历和修改的方式2.2使用迭代器遍历和修改字符串2.3使用范围for遍历对象(C11支持的新特性) 3、常见,常用方法或重载3.1查询大小和容量管理3.2增3.…...

Android Studio 连接夜神模拟器 自动断开的问题
版本情况: Android Studio Meerkat Feature Drop | 2024.3.2 Build #AI-243.25659.59.2432.13423653, built on April 30, 2025 Runtime version: 21.0.6-13368085-b895.109 amd64夜神模拟器 V7.0.5.9046 问题描述: cmd命令行使用adb连接夜神模拟器成…...

Python入门手册:Python中的数据结构类型
在Python中,数据结构是组织和存储数据的方式,它们允许你以高效的方式操作和处理数据。Python提供了几种内置的数据结构,包括列表(List)、元组(Tuple)、集合(Set)和字典&a…...
《P3435 [POI 2006] OKR-Periods of Words》
题目描述 一个字符串是由有限个小写英文字母组成的序列。特别地,它可以是一个空序列,即由 0 个字母组成的序列。我们用 ABC 表示字符串 A 是通过连接字符串 B 和 C(按此顺序)得到的(即一个接一个地写在一起࿰…...
C/C++---隐式显式转换
1. 隐式转换(Implicit Conversion) 隐式转换是编译器主动进行的类型转换,无需程序员额外编写代码。这种转换一般发生在赋值、函数调用、表达式计算等场景中。 1.1 隐式转换的常见场景 数值类型转换:从较小的类型转换为较大的类…...

巡礼中国西极·跨越昆仑天山 | 北斗卫星徽章护航昆仑科考
神秘深邃,遗世独立。帕米尔高原,横亘于中亚东南部,我国的最西端,面积约10万平方千米,平均海拔4500米以上,古代丝绸之路在此经过。昆盖山,一座掩藏在帕米尔高原褶皱深处、鲜为人知的山脉…...

Vue常用自定义指令-积累的魅力【VUE】
前言 在【自定义指令—v2与v3之间的区别【VUE基础】一文中,整理了自定义指令部分vue2和vue3 两个版本的区别,有兴趣的伙伴或者针对自定义部分比较迷茫的伙伴可以跳转看一下。此次主要介绍一些自己积累的一些自定义指令的代码,与大家一起分享。…...

LangChain4j第三篇: RAG的简单应用与实践
引言:RAG 构建属于你的大模型 大语言模型(LLM)的知识体系本质上仅限于它所接受的训练数据。 其一在知识时效性方面,模型参数固化于训练完成的时点,而现实世界中的知识和信息持续动态更新。 其二在非公开数据层面,企业内部的机密文档(如产品设计图、商业策略等)及个人隐…...
机器学习第二十六讲:官方示例 → 跟着菜谱学做经典菜肴
机器学习第二十六讲:官方示例 → 跟着菜谱学做经典菜肴 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 以跟着菜谱学…...

功能强大且易于使用的 JavaScript 音频库howler.js 和AI里如何同时文字跟音频构思想法
howler.js 是一个功能强大且易于使用的 JavaScript 音频库,它提供了跨浏览器的音频播放功能,支持多种音频格式,并且具有丰富的 API,可以方便地控制音频的播放、暂停、循环、音量等。下面是如何在 Vue 项目中使用 howler.js 实现音…...
品鉴JS的魅力之防抖与节流【JS】
前言 小水一波,函数的防抖与节流。 文章目录 前言介绍实现方式防抖节流 介绍 防抖与节流的优化逻辑,在我们的日常开发中,有着一定的地位。 防抖和节流是两种常用的性能优化技术,用于限制某个函数在一定时间内被触发的次数,减少不…...

如何使用patch-package给npm包打补丁
一、背景 在移动应用开发中,轮播是一种很常见的效果,我们项目采用的是RN跨平台技术,RN的轮播我们直接使用的是第三方插件:react-native-snap-carousel。不过,当我们在项目中使用的时候却发现Android和iOS的表现不一致:https://stackoverflow.com/questions/60711611/rea…...

maxkey单点登录系统
github地址 https://github.com/MaxKeyTop/MaxKey/blob/master/README_zh.md 1、官方镜像 https://hub.docker.com/u/maxkeytop 2、MaxKey:Docker快速部署 参考地址: Docker部署 | MaxKey单点登录认证系统 拉取docker脚本MaxKey: Dromara 🗝️MaxK…...

windows bat 在目录下(包括子目录)搜索批量指定文件名称复制到另一个文件夹内
windows bat 在目录下(包括子目录)搜索批量指定文件名称复制到另一个文件夹内 前言:最近遇到一个需求,我有15个文件夹(可能包含子文件夹) ,目前我有一批文件名称,需要在这15个文件夹中查找出来,并拷贝到一个新的文件夹…...

Notepad++ 下载与安装教程(小白专属)
文章目录 Notepad下载渠道的专业选择1. 官方网站下载(海外用户或网络条件优越者首选)2. 国内优化下载地址(国内用户高效选择) Notepad精细化安装流程解析总结与后续建议 在当前的开发与文本处理工作中,Notepad无疑是一…...