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


由此推得


其余不过多赘述

目录
相关文章
|
1月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
1月前
|
存储 监控 算法
监控电脑屏幕的帧数据检索 Python 语言算法
针对监控电脑屏幕场景,本文提出基于哈希表的帧数据高效检索方案。利用时间戳作键,实现O(1)级查询与去重,结合链式地址法支持多条件检索,并通过Python实现插入、查询、删除操作。测试表明,相较传统列表,检索速度提升80%以上,存储减少15%,具备高实时性与可扩展性,适用于大规模屏幕监控系统。
112 5
|
2月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
176 26
|
2月前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
124 6
|
2月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
166 5
|
2月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
309 1
|
2月前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
241 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
1月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
216 0
|
2月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
372 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
1月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
118 0

推荐镜像

更多