创作不易,来了的客官点点关注,收藏,订阅一键三连❤😜
前言
程序=数据结构+算法,算法是数学理论和工程实现的杂糅,是一个十分有趣神奇的学问。搞懂算法用另一种视角看编程,又会是一种全新的感受,如果你也在学习算法,不妨跟主任萌新超差一起学习,拿下算法!
系列文章目录
python每日算法 | 实例详解希尔算法与时间复杂度的讨论
python每日算法 | 分治法与归并排序,你还在担心被面试官问归并算法吗?
概述
本期的内容将介绍十大排序算法之桶排序,通过本期内容你将掌握桶排序如何用python实现。
目录
超超python每日算法思维导图
桶排序
桶排序是什么
在计数排序中,如果元素的范围比较大(比如1到1亿),那么如何改造算法?那么通过本期的桶排序就可以解决;
桶排序(Bucket Sort):首先将元素分在不同的桶中,再对每个桶中的元素排序。
实例讲解
我们得到如下列表元素,其中最大的值是49,接下来将对应的数放入不同的桶,放入桶的同时使用插入排序;进桶操作完成后,那么桶排序页基本完成了,随后将桶内元素提取出来。
桶排序代码的实现
def bucket_sort(lst, n=100, max_num=10000): # 船体列表和最大值为10000
buckets = [[] for _ in range(n)] # 创建桶
for var in lst:
i = min(var // (max_num // n), n - 1)
# 此时需要考虑如何进桶,i表示var放入几号桶里
buckets[i].append(var) # 把var加到桶里
for j in range(len(buckets[i]) - 1, 0, -1): # 通过插入排序排序桶内元素
if buckets[i][j] < buckets[i][j - 1]:
buckets[i][j], buckets[i][j - 1] = buckets[i][j - 1], buckets[i][j]
else:
break
sorted_lst = []
for buc in buckets:
sorted_lst.extend(buc)
return sorted_lst
import random
lst1 = [random.randint(0, 10000) for i in range(100000)]
# print(lst1)
lst1 = bucket_sort(lst1)
print(lst1)
# 结果
# [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,......]
注:本次代码对于进桶后的排序可以进行优化。
桶排序的时间复杂度
桶排序的表现取决于数据的分布。也就是需要对不同数据排序时采取不同的分桶策略。 平均情况时间复杂度:O(n+k)
最坏情况时间复杂度:O(n2k)
空间复杂度:O(nk)
十大排序算法之九大算法
创作不易,客官点个赞,评论一下吧!超超和你一起加油❤😜