桶排序(最简单的排序算法)

桶排序的基本思想:

将一个数据表分割成许多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)

优点:

  1. 桶排序是比较稳定的。
  2. 桶排序是常见排序中最快的一种,大多数情况下比快排还要快一些。

缺点:

  1. 虽然桶排序非常快,但是也非常消耗空间,基本上是最耗空间的一种排序算法

排序算法的稳定性
如果在对象序列中有两个对象r[i] 和 r[j],它们的排序码 k[i] == k[j] 。如果排序前后,对象r[i] 和 r[j]的相对位置不变,则排序算法是稳定的,否则就是不稳定的

时间开销:
排序的时间开销可用算法执行中的数据比较次数与数据移动次数来衡量。
算法运行时间代价大略估算一般都按平均情况进行估算,对于那些受对象排序码序列初始排列及对象个数影响较大的,则按最好情况和最坏情况进行估算
空间开销:
算法执行所需的附加存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值