一、思维导图

二、冒泡排序

def bubble_sort(ls):"""用i循环,逐步比较相邻元素,直到循环结束,停止交换,就像一个个气泡从下往上冒泡,每一次的循环结果都是最大的元素到了后面已排序序列的列首。"""j = 0  # 用于确定循环次数,同时用于下面排除已排序序列while j < len(ls):i = 0  # 用于遍历未排序序列while i < len(ls) - 1 - j:  # -j排除已排序序列# 两两比较if ls[i] > ls[i + 1]:ls[i], ls[i + 1] = ls[i + 1], ls[i]i += 1j += 1

三、选择排序

def selection_sort(ls):"""选择排序逐步找到每个最小元素依次放入前面已排序列列尾"""i = 0  # 用于确定遍历次数,也可理解为已排好序的元素后的第一个位置while i < len(ls) - 1:m = i  # 用于存放下标最小值,每次循环前需要重置为i,一次循环结束后交换m和j的位置j = i + 1  # 用于 遍历i后面的所有元素与i对比,同时把遍历到的最小值赋值给m,# 遍历j用于寻找最小的元素并用m标记while j < len(ls):if ls[j] < ls[m]:m = jj += 1if m != i:  # 避免无意义的交换ls[i], ls[m] = ls[m], ls[i]  # 将寻找到的最小元素交换到最前面i += 1

四、直接插入排序

def insertion_sort(ls):"""直接插入排序"""i = 1  # 记录待排序列中的第一个元素,从1开始是因为第一步只插入了一个元素没必要排序while i < len(ls):temp = ls[i]  # 用于保存当前元素的值j = i  # j用于向前遍历,逐步与temp比较,若j-1大于temp直接右移j-1,最后当j-1<=temp,空出来的位置填入temp# j<0表示只有一个元素时不必排序while temp < ls[j - 1] and j > 0:ls[j] = ls[j - 1]j -= 1ls[j] = tempi += 1

五、快速排序


def quick_sort_part(ls, L, R):"""快速排序"""# 定义基准P = ls[L]while R > L:while ls[R] >= P and R > L:  # R和L是会变化的,所以内循环也要检查 R 是否 > LR -= 1ls[L] = ls[R]  # 比基准小的数据放在左边while ls[L] <= P and R > L:L += 1ls[R] = ls[L]  # 比基准大的数据放在右边# 当L=R说明只剩最后一个元素,把P填进去ls[L] = P  # or ls[R] = Preturn R  # 返回当前基准,也可以return Ldef quick_sort(ls, L, R):"""快速排序"""if R > L:  # 只有当不止一个元素时才进行快排# 进行第一次快排P_index = quick_sort_part(ls, L, R)# 递归,直到R>L# 对基准左边的进行快排quick_sort(ls, L, P_index - 1)  # 此处递归结束表示第一次快排之后的左边部分已经排序完毕。# 对基准右边的进行快排quick_sort(ls, P_index + 1, R)  # 此处递归结束表示第一次快排之后的右边部分已经排序完毕。

六、希尔排序

def shell_sort(ls):""""""n = len(ls)  # ls的长度gap = n // 2  # 初始化gap# 确定外层循环次数while gap > 0:for i in range(gap, n):  # 从与第一个元素相隔gap的元素开始遍历j = i  # 不能改变外循环的i,需要创建一个j用于比较while j >= gap and ls[j] < ls[j - gap]:  # j>=gap 判断 j-gap 是否会越界。ls[j]<ls[j-gap] 判断是否需要交换ls[j - gap], ls[j] = ls[j], ls[j - gap]  # 交换j -= gap  # 让当前元素继续向前跳跃 gap 步,去和更前面的同组元素比较,直到它到达正确的插入位置。# 更新步长gap = gap // 2

七、归并排序

# 定义归并排序算法
def merge_sort(alist):"""归并排序"""# 如果列表的元素个数小于等于1 直接返回if len(alist) <= 1:return alist# 将列表从中间分割成两半mid = len(alist) // 2left_half = alist[:mid]right_half = alist[mid:]# 分别 递归 将左右两部分再次进行分割两半"""递归流程: 直到满足if len(alist) <= 1:之前会一直递归,无法执行到merge函数,满足if len(alist) <= 1:,之后left_half和right_half会被赋值,两个都是只有一个元素的列表此时才能执行到合并函数merge,执行完之后会向递归的上一层的left_half或right_half返回合并后的列表,此时的left_half和right_half的某一个或者全部会变成两个元素的列表然后回再次执行合并函数merge,直到整个递归流程结束,left_half和right_half为最初分开的两半,最后执行合并函数即完成整体合并"""left_half = merge_sort(left_half)right_half = merge_sort(right_half)# 合并左右两部分的序列return merge(left_half,right_half)  # 合并# 定义合并的算法
def merge(left,right):"""用于merge_sort递归合并的简单的合并并排序算法"""# 将排序好的额元素放入空列表中arr = []i=0 # 遍历左边列表中的每个元素j=0 # 遍历右边列表中的每个元素#比较两个列表中的元素 将小的元素先放入arr空列表中while i<len(left) and j<len(right):if left[i] < right[j]:arr.append(left[i])i+=1else:arr.append(right[j])j+=1# 如果右边列表由剩余元素 将它直接插入列表中while j<len(right):arr.append(right[j])j+=1# 如果左边列表由剩余元素 将它直接插入列表中while i < len(left):arr.append(left[i])i += 1return arr

八、二分查找

def binary_search_iter(arr, target):"""在 有序 升序 数组 arr 中查找 target。返回其索引;若不存在返回 -1。"""left, right = 0, len(arr) - 1  # 闭区间 [left, right]while left <= right:  # 区间非空mid = (left + right) // 2if arr[mid] == target:return midelif arr[mid] < target:left = mid + 1  # 去右半边else:right = mid - 1  # 去左半边return -1ls = [1, 2, 5, 7, 9, 11, 13, 17, 19, 20]
print(binary_search_iter(ls, 9))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90391.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90391.shtml
英文地址,请注明出处:http://en.pswp.cn/web/90391.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

策略模式(Strategy Pattern)+ 模板方法模式(Template Method Pattern)的组合使用

using Microsoft.Extensions.DependencyInjection;namespace ConsoleApp9 {internal class Program{static async Task Main(string[] args){Console.WriteLine("Hello, World!");// 创建并配置依赖注入容器var _serviceProvider new ServiceCollection().AddScoped…

es0102---语法格式、数据类型、整合springboot、创建库、创建映射、新增数据、自定义查询

ES 一、创建映射字段的语法格式 需要先构建索引库&#xff0c;在构建索引库中的映射关系 PUT /索引库名/_mapping {"properties": {"字段名": {"type": "类型","index": true&#xff0c;"store": false&#…

spring boot h2数据库无法链接问题

spring boot h2数据库无法链接问题datasource:# 数据库连接地址&#xff1a;H2在2.x后&#xff0c;不再支持创建数据库&#xff0c;需要手工创建&#xff0c;如&#xff1a;touch test.mv.db&#xff0c;# 否则会报“Database file not found”错误url: jdbc:h2:file:~/testdri…

pycharm配conda环境

最近在做表情包&#xff0c;画出来的表情包大小不一&#xff0c;但是vx表情包平台要求统一都是240*240的&#xff0c;所以用Pillow统一处理的一下。 如果你本地装的python并且添加到path了&#xff0c;pycharm可以自动获取到&#xff0c;但是我装得miniconda&#xff0c;pychar…

【Elasticsearch】Elasticsearch 跨机房部署

《Elasticsearch 集群》系列&#xff0c;共包含以下文章&#xff1a; 1️⃣ 冷热集群架构2️⃣ 合适的锅炒合适的菜&#xff1a;性能与成本平衡原理公式解析3️⃣ ILM&#xff08;Index Lifecycle Management&#xff09;策略详解4️⃣ Elasticsearch 跨机房部署5️⃣ 快照与恢…

立式数控深孔钻的工艺及光学检测方法 —— 激光频率梳 3D 轮廓检测

引言立式数控深孔钻作为深孔加工的关键设备&#xff0c;其工艺水平直接影响零件加工质量。深孔加工面临排屑、散热等挑战&#xff0c;而光学检测技术的发展为深孔加工精度控制提供了新途径。激光频率梳 3D 轮廓检测技术与立式数控深孔钻工艺的结合&#xff0c;实现了深孔加工与…

【YOLO系列】YOLOv4详解:模型结构、损失函数、训练方法及代码实现

YOLOv4详解&#xff1a;模型结构、损失函数、训练方法及代码实现 motivation YOLO系列作者Joseph Redmon与Alexey Bochkovskiy致力于解决目标检测领域的核心矛盾&#xff1a;精度与速度的平衡。YOLOv4的诞生源于两大需求&#xff1a; 工业落地&#xff1a;在移动端/边缘设备…

chromedriver下载与安装方法

chromedriver下载地址&#xff1a; 版本在&#xff1a;http://chromedriver.storage.googleapis.com/index.html 这是下载后&#xff1a; 把exe文件复制到浏览器的安装目录下 把exe文件复制到python的安装目录下 配置环境变量:此电脑→右击属性→高级系统设置→环境变量→用户…

基于QT(C++)实现(图形界面)选课管理系统

选课管理系统1 概述1.1 课程设计目的和意义根据课程大纲设定&#xff0c;面向对象课程设计的目的是&#xff1a;&#xff08;1&#xff09;理解面向对象的基本思想和三大机制&#xff0c;掌握基于 C 语法的面向对象的基 本概念和开发模式&#xff0c;熟练运用面向对象思维模式…

【阿里云-ACP-1】疑难题解析

1.弹性伸缩 AS 在企业中有广泛的应用场景,不仅适合业务量不断波动的应用程序,同时也适合业务量稳定的应用程序。以下关于弹性伸缩的使用说法正确的是( ) 选项内容 A 弹性伸缩可以用于云数据库 RDS 的自动扩容 B 弹性伸缩支持自动将 ECS 实例或 ECI 实例添加到 Memcache 实…

NLP:seqtoseq英译法案例

本文目录&#xff1a;一、案例概述二、数据集三、案例步骤&#xff08;一&#xff09;导入工具包和工具函数&#xff08;二&#xff09;数据预处理&#xff08;三&#xff09;构建数据源对象&#xff08;四&#xff09;构建数据迭代器&#xff08;五&#xff09;构建基于GRU的编…

docker的准备与部署

docker的重复使用bilibli 黑马视频 方便查看docker容器。设置格式通过官网dock查看格式命令 命令别名&#xff0c;简化输入

Java 大视界 -- Java 大数据在智能教育自适应学习路径规划与学习效果强化中的应用(362)

Java 大视界 -- Java 大数据在智能教育自适应学习路径规划与学习效果强化中的应用(362) 引言: 正文: 一、Java 构建的智能教育数据架构 1.1 多维度学习数据实时采集 1.2 知识图谱构建与知识点关联 二、Java 驱动的自适应学习路径规划 2.1 多模型融合的路径生成 2.2 学习效果…

2.1 为什么定义tensor数据结构?

PyTorch选择定义Tensors而非直接使用NumPy进行运算和数据处理&#xff0c;主要是因为Tensors在功能、性能和场景适配性上更贴合深度学习的需求。以下是关键原因分析&#xff1a; 1. 自动求导与计算图支持 核心差异&#xff1a;PyTorch的Tensors在运算时会自动构建计算图&#x…

Qt Quick 3D渲染

Qt Quick 3D是Qt框架中用于创建3D图形界面的强大模块&#xff0c;它提供了声明式的QML API&#xff0c;使得开发者无需深入底层图形API就能构建复杂的3D场景。本文将全面介绍Qt Quick 3D的核心概念和技术细节&#xff0c;包括3D场景坐标系统、场景环境设置、光照与材质系统、相…

笔试——Day17

文章目录第一题题目思路代码第二题题目&#xff1a;思路代码第三题题目&#xff1a;思路代码第一题 题目 小乐乐改数字 思路 模拟 当前位置为偶数时&#xff0c;改为0&#xff1b;否则改为1记得取出前导0&#xff1b;stoi()函数可以直接自动去除前导0 代码 第二题 题目&a…

【c#】完美解决部署IIS 报错 0x8007000d

1、错误页面&#xff1a;2、解决思路&#xff1a; 1、点击IIS站点&#xff0c;右键点击浏览到文件夹下&#xff0c;路径打开cmd&#xff0c;找到对应的站点的dll&#xff0c;运行失败会提示错误原因。需要安装某些dll2、选中站点&#xff0c;点击模块&#xff0c;检查模块AspNe…

Visual Studio 2010-.Net Framework 4.0项目-NPOI安装

在管理Nuget程序包中搜索NPOI&#xff0c;下载最新版会报错&#xff1a;使用程序包控制台输入&#xff1a;Install-Package NPOI -Version 2.5.1

Redis原理之分布式锁

上篇文章&#xff1a; Redis原理之缓存https://blog.csdn.net/sniper_fandc/article/details/149141968?fromshareblogdetail&sharetypeblogdetail&sharerId149141968&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link​​​​​​​ 目录 1 …

网络基础19:OSPF单区域原理实验

一、实验拓扑二、设备配置AR1 配置<AR1> system-view [AR1] interface GigabitEthernet0/0/0 [AR1-GigabitEthernet0/0/0] ip address 192.168.1.1 24 [AR1-GigabitEthernet0/0/0] quit[AR1] ospf 1 router-id 0.0.0.1 [AR1-ospf-1] area 0 [AR1-ospf-1-area-0.0.0.0] ne…