八十七、Python | 十大排序算法系列(上篇)
off999 2024-10-27 11:53 28 浏览 0 评论
@Author:Runsen
@Date:2020/7/10
人生最重要的不是所站的位置,而是内心所朝的方向。只要我在每篇博文中写得自己体会,修炼身心;在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰难,奋勇前行,不忘初心,砥砺前行,人生定会有所收获,不留遗憾 (作者:Runsen )
作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件。导致翘课严重,专业排名中下。.在大学60%的时间,都在CSDN。决定今天比昨天要更加努力。
辣鸡的我决定继续更新Python教程,今天就开始了八十七、Python | 十大排序算法系列(上篇)。还有不到区区的十三篇,我快完成了。
如果把基础的数据结构与算法都自己亲自实现一遍,那么你已经比 90% 的 Python 程序员更优秀了。
关于排序就是下面的十大排序算法
冒泡排序
python实现冒泡排序的核心思想是通过从列表一端迭代循环元素,再通过一个循环让这个元素之后的元素相邻两个比较,从而依次将最大值移动到最末端,如下图示意。
Python冒泡排序的代码实现。
def bubble_sort(nums):
for i in range(len(nums) - 1):
for j in range(len(nums) - i - 1):
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
return nums选择排序
排序算法:首先搜索整个列表,找到最小项的位置,如果该位置不是列表的第1项,就交换这两个位置的元素。然后从列表的第2个元素开始,重复上述过程,直到算法达到整个过程的最后一个位置,图形解释如下
下面使用55、23、87、62、16数列从小到大的排序过程来说明选择排序法的演算流程。原始数据如图:
1、首先找到此数列中最小值后,与数列中的第一个元素交换,如下图所示。
从第二个值开始找,找到剩余数列中(不含第一个填充为绿色的数字)的最小值,再和第二个值交换,如下图所示。
从第三个值开始找,找到此数列中(不含第一、二个的最小值),再和第三个值交换,如下图
从第四个值开始找,找到剩余数列的最小值,再和第四个值交换,排序完成,如下图。
Python选择排序的代码实现。
def selectionSort(x):
i = 0
while i < len(x) - 1:
minindex = i
j = i + 1
while j < len(x) :
if x[minindex] > x[j]:
minindex = j
j+= 1
if minindex != i:
swap(x,i,minindex)
i+= 1
return x插入排序
插入排序的实现思路顾名思义,就是不断地在一个已经是有序的数组中,寻找合适位置并插入新元素。
从后往前依次进行比较,如果待插入元素大于当前元素,则将待插入元素插入到当前元素的后一位,如果待插入元素小于当前元素,则将当前元素后移一位。不断重复该过程直至到数组的最后一位
Python插入排序的代码实现。
def insertion_sort(a):
length = len(a)
if length <=1:
return
for i in range(1,length):
j = i-1
value = a[i]
while j >=0:
if a[j]<value:
a[j+1] = value
break
else:
a[j+1] = a[j]
if j == 0:
a[j] = value
j -=1
print(a)
return a希尔排序
希尔排序的基本思想是:把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。
随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到 1 时,整个数据合成为一组,构成一组有序记录,则完成排序。
我们画个图来说明一下
上面的排序其实和冒泡排序很像,只不过冒泡排序是每次都是间隔为1相邻的两个之间进行比较,但希尔排序是间隔为step,还是有一定区别的。
Python 希尔排序的代码实现。
def shell_sort(list):
n = len(list)
gap = n // 2
while gap >= 1:
for j in range(gap, n):
i = j
while( i - gap ) >= 0:
if list[i] < list[ i - gap ]:
list[i], list[ i - gap ] = list[ i - gap ], list[i]
i -= gap
else:
break
gap //= 2
if __name__ == '__main__':
alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print("原列表为:%s" % alist)
shell_sort(alist)
print("新列表为:%s" % alist)归并排序
归并排序的基本思想:将待排序序列R[0…n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;将这些有序序列再次归并,得到n/4个长度为4的有序序列;如此反复进行下去,最后得到一个长度为n的有序序列。
归并排序其实要做两件事:
(1)“分解”——将序列每次折半划分。
(2)“合并”——将划分后的序列段两两合并后排序。
Python 归并排序的代码实现。
def merge(left, right):
i = 0
j = 0
temp = []
while i <= len(left) - 1 and j <= len(right) - 1:
if left[i] <= right[j]:
temp.append(left[i])
i += 1
else:
temp.append(right[j])
j += 1
temp += left[i:] + right[j:]
return temp
print(merge([1,3,4],[2,3,3])) 相关推荐
- 路由器密码锁解锁教程(路由器密码忘怎么设置)
-
1.路由器IP地址定位:通常而言,路由器在连接主网线之后,会广播一个自身的网络IP地址,一般如下:192.168.1.0,192.168.1.1,目前各大路由器厂商也会播出一些怪异的地址,比如10.1...
- 台式电脑键盘按键错乱怎么恢复
-
如果你的机械键盘按键错乱,你可以尝试将键盘连接到电脑上,然后通过按下“Ctrl”、“Alt”和“Del”键同时重启电脑,看看是否能够恢复默认设置。另外,你还可以尝试在控制面板中找到键盘设置,检查是否有...
- 移动硬盘格式化后还能用吗(移动硬盘格式化后数据会丢失吗)
-
当然可以使用!格式化只是里面的所有文件会没有,还可以再存储的。格式化(format)是指对磁盘或磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被...
- 手机系统升级好不好
-
手机系统并不是随时更新,都是好用的,手机主要针对你的处理器,如果老型使用年头比较多的手机,不建议更新系统,更新系统之后容易造成耗电量非常大,卡顿现象比较严重,而新出的手机产品处理器功率都偏大,这种手机...
- win2003序列号企业版(win2003 enterprise序列号)
-
Windows2003:JB88F-WT2Q3-DPXTT-Y8GHG-7YYQY cky24-q8qrh-x3kmr-c6bcy-t847y win2003EnterpriseServer:...
-
- 电脑c盘满了应该怎么办(如果电脑c盘满了怎么办啊)
-
1、电脑桌面双击此电脑2、进入后找到Windows(C)盘,然后鼠标右击选择属性3、点击磁盘清理4、勾选需要清理的文件,最后点击确定即可1、运用磁盘清理软件清理C盘,大约可为C盘释放50M-800M空间。2、关闭休眠功能,在开始菜单的运行里...
-
2025-12-18 11:03 off999
- win10桌面突然清空了(电脑桌面全部被隐藏了怎么恢复)
-
1、右键点击任务栏,然后选择任务管理器或按快捷键Ctrl+Shift+Esc; 2、打开任务管理器后,切换到详细信息模式。在进程中找到“桌面窗口管理器”(英文版系统找DesktopWindowM...
- 华硕笔记本全系列介绍(华硕笔记本全系列介绍视频)
-
关于这个问题,华硕笔记本一共有多个系列,每个系列定位不同。以下是华硕笔记本的主要系列及其定位:1.ASUSVivoBook(维沃系列):面向普通用户和学生,注重轻薄、时尚设计和价格实惠。2.AS...
- 华为笔记本电脑i5和i7区别(华为笔记本电脑i5和i7区别是什么)
-
主要是性能上的区别。如果将CPU比作火车运输,那么i5等于4条高铁,i7可以是6条或者8条高铁,运输量倍数增加。i7可以看作是i5的高配版。功能不同。i5和i7两个版本,其主要区别是在处理器的频率不...
-
- u盘启动蓝屏(联想电脑进入u盘启动蓝屏)
-
电脑插入U盘后蓝屏的原因如下:1、Windows的系统分区存在磁盘错误或文件错误2、主板的SATA或IDE控制器驱动程序受到了损坏或安装不正确3、计算机遭到了病毒木马、流氓软件等恶意程序的攻击解决办法如下:1、执行磁盘扫描程序对所有的磁盘驱...
-
2025-12-18 08:51 off999
- 下载新版微信并安装(下载新版微信并安装到手机)
-
1.首先打开手机的浏览器,在搜索栏中输入微信官网,并点击搜索。2.出现微信后点击下载,下载完成后,点击安装。 3.安装完成后,再回到桌面,点击“微信”4.输入账号密...
- 测速在线测试(测速在线测试高铁)
-
回答:不靠谱。例如:SPEEDTEST是一家叫Ookla的公司开发的测速工具,稍有经验的朋友想必对它都不会陌生。Ookla在全世界各地维护了大量测速节点,SPEEDTEST测量的就是与这些测速节点间的...
- 格式工厂免费版(格式工厂免费版破解版)
-
不收费用格式工厂是由上海格式工厂网络有限公司创立于2008年2月,是面向全球用户的互联网软件。格式工厂发展至今,已经成为全球领先的视频图片等格式转换客户端。格式工厂致力于帮用户更好的解决文件使用问题,...
- 路由器连接电脑插哪个端口(路由器跟电脑的连接线怎么插)
-
电脑连接路由器插入路由器LAN口。具体方法如下1、光纤或网线插到路由器的WAN口上,(或网线连接modem的line口,modem的lan口连接了无线路由的wan口);2、电脑网线从路由器的LAN口上...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
