Python算法:三种简单排序的方法

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

前言


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


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


来说说简单排序


简单排序一共分为三种


  1. 插入排序
  2. 选择排序
  3. 冒泡排序


1、插入排序


那么首先介绍下插入排序的原理,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。


实例


1list = list(map(int,input().split(',')))
2for i in range(1,len(list)):
3    for j in range(0,i):
4        if list[i]<list[j]:
5            z=list[i]
6            list.pop(i)
7            list.insert(j,z)
8            break
9
10print(list)

简单解释下,第一行通过input传入字符串数据,后面加上split(',')是使用逗号进行分割,若题目未明确要求,可以使用空格替代逗号


接下来使用map函数,将传入的数据转换成int类型


通过list构建列表


外层的循环通过变量i来进行迭代,此处使用len()获取由传入数据构建出的列表的长度作为迭代次数的终止值


那实际上,这个循环的目的就是针对从第二个/第1位开始的每个数据


通过第二个循环来进行比较这个数据和他前面的数据的大小关系


那么这里我们也可以看到,因为是和前一个数据去比较,第一个/第0位数据前面是没有东西的, 所以,我们外层循环的迭代,是从第二个/第一位数据开始的


那第二个循环的迭代有什么含义呢,可以看到使用的是变量j进行迭代,从第0位数据迭代到第i位


接下来使用if进行判断

list[i]<list[j]

如果我要判断的第i位数据,小于它前面第j位的数据,那就先使用一个新变量把第i位的值保存下来,再用pop()函数弹出list[i],接下来通过insert方法,将其插入到第j位数据的前面,使保存list[i]的值的变量z,出现在第j位然后退出内层循环,开始对第i+1位数据进行判断,以此类推


2、选择排序


通过动图可以看出,本算法的原理是为找出列表中最大/最小的值,然后将其与最左/最右的数据进行换位,来实现排序


实例


list = list(map(int,input().split(',')))
for i in range(len(list)):
    min_num=i
    for j in range(i+1,len(list)):
        if list[j]<list[min_num]:
            min_num=j
    list[i],list[min_num]=list[min_num],list[i]
print("排序后为:")
for i in range(len(list)):
    print("%d"%list[i])

简单来看一下,第一行不多说了,和刚才一样


外层循环也是


发现有个新变量哈——min_num,这个变量专门用来存储数据中最小的值对应的位数


在初始阶段,我们将最小值设定为第一个/第0位对应的数据


接下来看第二个循环,它迭代的范围是从i后面的第一位数据到列表的最后一位数据


如果发现后面有比他更小的,就将min_num中对应的位数换成第j位


当然,因为这个时候才刚刚进行第一次判断,所以不能更改其值,min_num=j只是暂时存储


那么注意缩进哈

    list[i],list[min_num]=list[min_num],list[i]

此处的代码看缩进可以很容易看出来,他并不属于第二个for内部


也就是,它是在if语句执行完一轮后才通过python特有的形式来进行交换两处的值


3、冒泡排序


吐槽一句,才发现冒泡排序原来这么呆


原理就是它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换


实例


def hongzhong(list):
    m = len(list)
    for i in range(m):
        for j in range(0,m-i-1):
            if list[j+1]<list[j]:
                list[j],list[j+1] = list[j+1],list[j]
list = list(map(int,input().split(',')))
hongzhong(list)
print("排序后的列表:")
for i in range(len(list)):
    print("%d"%list[i])

看起来相对于其他两种有点复杂


别慌


首先定义了一个叫hongzhong的函数,里面通过变量m存储列表长度


最外层循环的目的是遍历整个列表中的元素


内层循环需要讲的只有一点


就是

for j in range(0,m-i-1):

这里为什么是总长度m减去当前长度i再减一


可以看到

假设我们从第二个开始,那么需要剩下元素的个数就是15-2


所以需要比较的次数,就是15-2-1


由此推得


其余不过多赘述

目录
相关文章
|
21天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
221 55
|
10天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
102 66
|
3天前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
37 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
2月前
|
存储 搜索推荐 Python
用 Python 实现快速排序算法。
快速排序的平均时间复杂度为$O(nlogn)$,空间复杂度为$O(logn)$。它在大多数情况下表现良好,但在某些特殊情况下可能会退化为最坏情况,时间复杂度为$O(n^2)$。你可以根据实际需求对代码进行调整和修改,或者尝试使用其他优化策略来提高快速排序的性能
128 61
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
160 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
14天前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
50 20
|
6天前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
12天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
43 5
|
27天前
|
安全
Python-打印99乘法表的两种方法
本文详细介绍了两种实现99乘法表的方法:使用`while`循环和`for`循环。每种方法都包括了步骤解析、代码演示及优缺点分析。文章旨在帮助编程初学者理解和掌握循环结构的应用,内容通俗易懂,适合编程新手阅读。博主表示欢迎读者反馈,共同进步。
|
1月前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
191 5