Python算法:三种高级排序的方法

简介: Python算法:三种高级排序的方法

前言


声明:本文所有动图来源为菜鸟教程


🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。


上一期说完了三种简单排序,这一期来说说三种高级排序方法


分别是


  • 快速排序
  • 希尔排序
  • 归并排序


1、快速排序


这个排序方法说起来和冒泡排序有点像,为什么这么说呢,咱先来看图

相对于上一期的简单排序而言,高级排序肯定就不是能一眼看出来了


不说废话了


这玩意分两步


第一步,快速排序首先需要的东西,是一个枢轴值,也就是基准


怎么说?


实际上就是,我选出来一个数作为基准


然后进行分割:比这个基准大的放在该基准的右边,比这个基准小的放在该基准的左边,和基准一样大的,放左右都行


第二步,将基准左/右侧的子序列进行递归排序


实例


def QuickSort(arr):
    if(len(arr)<2): #不用进行排序
        return arr
    else:
        pivot=arr[0]
        less=[i for i in arr[1:] if(i<=pivot)]
        great=[i for i in arr[1:] if(i>pivot)]
        return QuickSort(less)+[pivot]+QuickSort(great)
arr=list(map(int,input().split(' ')))
print("原始数据:",arr)
print("排序后的数据:",QuickSort(arr))

那么这里,我们并没有完全采用上述原理


而是使用重复二分的方式,将数据分为更大与更小两个列表


通过更小+基准+更大


重复拼接,来达到目的


首先来进行读取数据


然后调用函数,如果列表里只有一个元素或者没有元素,就不需要判断


否则,以第一个元素作为基准,分出比他大的和比他小的,分别放在两个列表中,进行拼接


https://www.bilibili.com/video/BV1wY4y1Z7Me?t=43.1


2、希尔排序


希尔排序其实不难,说白了就是插入排序plus,咱们可以很容易地理解


这个排序算法主要利用到了步长

先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。


接下来直接看实例,并讲解


实例


nums = list(map(int,input().split(' ')))
def ShellSort(nums):
    step = len(nums)//2 #初始化增量为数组长度的一半
    while step > 0: #增量必须是大于0的整数
        for i in range(step,len(nums)):#遍历需要进行插入排序的数
            while i >= step and nums[i] < nums[i-step]: #对每组进行插入排序
                nums[i],nums[i-step] = nums[i-step],nums[i]
        step //= 2#增量缩小一半
    print(nums)
ShellSort(nums)

上图原地址 :秒懂算法3-希尔排序_哔哩哔哩_bilibili


按上图来解释,首先我们去步长/跨度


用列表整体长度整除2,上图中一共有九张牌,9//2就等于4,由于我们的循环是从step,也就是第四位开始的,所以我们要判断的条件是八万是否要小于七万。


不小于,不执行


i递增,到了二万,她所对应的是四万,小于,即换位


以此类推到最后一位


结束循环,后缩小步长,再来一遍,直到步长为一,整体排一遍


3、归并排序


基本思想:


  • 分割:递归地把当前序列平均分割成两半
  • 集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)

这个算法可以说是只要理解快速排序,直接拿捏了


直接看算法

def merge(L,R):
    i, j = 0,0
    # 用于存放L与R的合并内容
    res = []
    while i < len(L) and j < len(R):
        if L[i] <= R[j]:
            res.append(L[i])
            i += 1
        else:
            res.append(R[j])
            j += 1
    res += R[j:] if i == len(L) else L[i:]
    return res
def merge_sort(List):
    length = len(List)
    if length <= 1:
        return List
    else:
        mid = length//2
        left = merge_sort(List[:mid])
        right = merge_sort(List[mid:])
        return merge(left,right)
List = list(map(int,input().split(' ' )))
print(merge_sort(List))

首先进行一个读取数据


调用函数merge_sort


该函数与上述快排相差无几,只不过是从中值开始分的


返回值时调用函数


创建一个新列表,如果左侧大于右侧,将左侧数据通过append放置末尾

res += R[j:] if i == len(L) else L[i:]

该语句负责将剩余的数据拼接到列表中


目录
相关文章
|
21天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
222 55
|
10天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
102 66
|
3天前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
39 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
14天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
50 20
|
7天前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
12天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
43 5
|
27天前
|
安全
Python-打印99乘法表的两种方法
本文详细介绍了两种实现99乘法表的方法:使用`while`循环和`for`循环。每种方法都包括了步骤解析、代码演示及优缺点分析。文章旨在帮助编程初学者理解和掌握循环结构的应用,内容通俗易懂,适合编程新手阅读。博主表示欢迎读者反馈,共同进步。
|
12天前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
46 0
|
12天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
145 80
|
6天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。