ACM基础(四):排序之桶排序 Bucket Sort


一、思路

/* A:待排序数组。要求小数[0,1),均匀分布(随机生成的)。
 B:已经创好的外存链表数组,共 n-1 个(是那种即使没有某些数,也会存在对应的链表的)。
 */
BUCKET-SORT(A)
	n ← length[A]
	// 遍历数组A,将A中每个元素插入到链表B[⌊ nA[i] ⌋]中
	for i ← 1 to n
		do	insert A[i] into list B[⌊ nA[i]]
	// 对每个链表B[i]进行插入排序
	for i ← 0 to n-1
		do	sort list B[i] with insertion sort
	将列表B[0],B[1],...,B[n-1]按序合并在一起

在这里插入图片描述
比如,B[0]的链表就是空的,但也提前分配好了。

二、时间复杂度

两部分:

  • 除了对链表进行插入排序的步骤: Θ ( n ) \Theta(n) Θ(n)
  • 对链表进行插入排序的步骤:插入排序的时间复杂度是 O ( n 2 ) O(n^2) O(n2),规模是 n i n_i ni个(为了分析排序时间,假设 n i n_i ni是一个随机变量,表示桶B[i]中放置的元素数量),结果就是n-1个链表所耗费插入排序的时间 ∑ i = 0 n − 1 O ( n i 2 ) \displaystyle \sum^{n-1}_{i=0}O(n_i^2) i=0n1O(ni2)

所以, T ( n ) = Θ ( n ) + ∑ i = 0 n − 1 O ( n i 2 ) T(n)=\Theta(n)+\displaystyle \sum^{n-1}_{i=0}O(n_i^2) T(n)=Θ(n)+i=0n1O(ni2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值