Python排序算法有哪些
发表于:2025-02-21 作者:千家信息网编辑
千家信息网最后更新 2025年02月21日,这篇文章主要介绍"Python排序算法有哪些",在日常操作中,相信很多人在Python排序算法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Python排序算法有
千家信息网最后更新 2025年02月21日Python排序算法有哪些
这篇文章主要介绍"Python排序算法有哪些",在日常操作中,相信很多人在Python排序算法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Python排序算法有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
随机值
这一次的测试数据与上一次的不同,上一次确实是太规律了,所以这一次采用随机值:
from random import randint
data = [randint(6, 20000) for i in range(30000)]
data.insert(500, 5)
data.insert(700, 7)
data.insert(900, 9)
并且还在生成的随机值列表中不同位置插入 3 个值,有了不规律的随机值,接下来就可以开始测试了。
冒泡排序
def bubble(data):
for i in range(len(data)-1): # 排序次数
for s in range(len(data)-i-1): # s为列表下标
if data[s] > data[s+1]:
data[s], data[s+1] = data[s+1], data[s]
return data
start_time = datetime.now()
res = bubble(data)
print(datetime.now() - start_time)
print(len(res), res[:5], res[700:705], res[10000:10005])
得到的输出结果为:
0:01:20.273247
30003 [5, 6, 7, 7, 7] [492, 492, 492, 493, 495] [6665, 6665, 6666, 6668, 6668]
80 秒!冒泡排序的测试结果证明,随机元素的列表排序比规律元素的列表排序费时更久。
选择排序(两层 for)
def selections(nums):
for i in range(len(nums)):
min_index = min(nums) # 最小值
for j in range(len(nums) - i):
if nums[min_index] < nums[j]:
min_index = j
nums[min_index], nums[len(nums) - i - 1] = nums[len(nums) - i - 1], nums[min_index]
return nums
start_time = datetime.now()
res = selections(data)
print(datetime.now() - start_time)
print(len(res), res[:5], res[700:705], res[10000:10005])
得到的结果为:
0:01:07.171114
30003 [6, 6, 7, 7, 8] [444, 445, 445, 446, 447] [6652, 6654, 6654, 6654, 6654]
本次耗时 67 秒,而之前使用规律的值排序时耗时约 47 秒。选择排序(两层 for)的测试结果同样证明了随机元素的列表排序比规律元素的列表排序费时更久。
选择排序(min max)
start_time = datetime.now()
res = []
for i in range(0, len(data)):
aps = min(data)
data.remove(aps)
res.append(aps)
print(datetime.now() - start_time)
print(len(res), res[:5], res[700:705], res[10000:10005])
运行后得到的输出结果为:
0:00:10.102158
30003 [5, 6, 6, 7, 7] [443, 443, 443, 444, 444] [6645, 6646, 6649, 6650, 6650]
这一次耗时 10 秒,甚至比之前规律元素排序耗费的 14 秒更省时间。
插入排序
def direct_insert(nums):
# 崔庆才丨静觅、韦世东丨奎因 邀请你关注微信公众号【进击的Coder】
for i in range(1, len(nums)):
temp = nums[i] # temp变量指向尚未排好序元素(从第二个开始)
j = i-1 # j指向前一个元素的下标
while j >= 0 and temp < nums[j]:
# temp与前一个元素比较,若temp较小则前一元素后移,j自减,继续比较
nums[j+1] = nums[j]
j = j-1
nums[j+1] = temp # temp所指向元素的最终位置
return nums
start_time = datetime.now()
res = direct_insert(data)
print(datetime.now() - start_time)
print(len(res), res[:5], res[700:705], res[10000:10005])
运行后得到的输出结果为:
0:00:57.681174
30003 [5, 6, 6, 7, 7] [455, 456, 459, 459, 460] [6647, 6649, 6649, 6649, 6649]
这一次插入排序的速度再不是快的离谱了,在猜想范围之内。
迷雾散去
相比上一次使用非常规律的 [ i for i in range(3000)],这一次使用 randint 生成的列表肯定是非常不规律的:
print(data[:20])
打印列表前 20 的元素,得到结果为:
[13698, 19871, 8468, 8735, 3473, 510, 788, 5070, 14585, 13324, 11743, 4310, 16460, 7102, 1900, 16608, 12342, 9724, 1482, 19609]
这些元素的值有百位、千位、万位,证明了它们确是是不规律的。
多次测试得到的结果都相差无几,在以上几种排序的测试中,3 万左右的数据量排序最快的是选择排序(min max),它的排序速度保持在 10 秒内。
到此,关于"Python排序算法有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
排序
元素
规律
结果
测试
算法
学习
选择
指向
上一
输出
不同
接下来
下标
位置
数据
更多
速度
帮助
生成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库外键怎么写英文
如何安装速达的数据库
共享文件管理系统文件服务器
蓬溪2020年外贸数据库系统
数据库专家 招聘
新疆科盛华网络技术开发
邮政开展网络安全培训会
微型网络技术
NC用什么软件开发
网络安全计算机哪个好
h3c串口服务器改密码
北京冬奥网络安全保障中心
宜兴进口软件开发处理方法
解网络安全知识
网络安全的五点
江阴项目软件开发系统
中山数字软件开发维修电话
数据库事务跟java事务
数据库原理与sql课后答案
forest搬迁国内服务器
四川信息化软件开发服务有哪些
中国互联网络安全现状
武林外传武林之巅服务器
湖北服务器机柜生产商
as9100d 软件开发
演员吉他谱软件开发
无锡电表软件开发公司
软件开发工程师级别标准
java获取数据库的值
广东中山erp软件开发