桶排序(最简单的排序算法)
程序员文章站
2022-03-03 08:40:41
...
桶排序的基本思想:
将一个数据表分割成许多buckets,然后每个bucket各自排序,或者用不同的排序算法,递归的…使用bucket sort 算法,也是一种典型的divide-and-conquer分而治之的策略,它是一种分布式的排序,介于MSD基数排序和LSD基数排序之间
def bucketSort(nums):
max_num = max(nums)
# 创建一个元素全是0的列表,当作桶
bucket = [0]*(max_num + 1)
for i in nums:
bucket[i] += 1
sort_nums = []
# 取出桶中的元素
for j in range(len(bucket)):
if bucket[j] != 0:
for e in range(bucket[j]):
sort_nums.append(j)
return sort_nums
nums = [5, 6, 4, 3, 2, 20, 1, 0, 9, 0]
print bucketSort(nums)
优点:
- 桶排序是比较稳定的。
- 桶排序是常见排序中最快的一种,大多数情况下比快排还要快一些。
缺点:
- 虽然桶排序非常快,但是也非常消耗空间,基本上是最耗空间的一种排序算法
排序算法的稳定性:
如果在对象序列中有两个对象r[i] 和 r[j],它们的排序码 k[i] == k[j] 。如果排序前后,对象r[i] 和 r[j]的相对位置不变,则排序算法是稳定的,否则就是不稳定的时间开销:
排序的时间开销可用算法执行中的数据比较次数与数据移动次数来衡量。
算法运行时间代价大略估算一般都按平均情况进行估算,对于那些受对象排序码序列初始排列及对象个数影响较大的,则按最好情况和最坏情况进行估算
空间开销:
算法执行所需的附加存储
上一篇: 简化版桶排序