Python排序算法有哪些
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章主要介绍"Python排序算法有哪些",在日常操作中,相信很多人在Python排序算法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Python排序算法有
千家信息网最后更新 2025年01月17日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安全错误
数据库的锁怎样保障安全
没有access数据库怎么办
思科服务器配置
网络安全公司内部工作
军营网络安全宣传周大讨论
椒江软件开发程序员
数据库工具选项卡隐藏
洛阳软银网络技术
路由器网络安全协议
大华服务器dds数据库密码
网络安全要怎么学
农作物病虫害防治数据库技术
上杭网络安全日
育碧服务器已登录还要激活吗
餐饮管理系统的数据库设计
数据库管理实验报告
sql数据库帐户密码
后端和软件开发哪个好
BW数据库挖掘潜在客户
c中数据库两个表关联
青浦区网络软件开发服务收费
移动端软件开发企业
nginx网络服务器负载均衡
科技知识词语 互联网
服务器 tpcc值
数据库通讯录c 课程设计
软件开发并销售几个点
护航网络技术
浙江服务器硬盘测评
车辆保险数据库系统技术方案
联想服务器密码