bucket sort sample sort 并行_bucket_sort:分组桶排序

56d1dee7c5b6c9ddb91731b8d4008876.png

@TOC

通排序是初始化一定数量的桶arr[n]={0} 对于数i 填入arr[i]即可(arr[i]++) 那么最后遍历arr即可,适用于范围较小的排序,复杂度为O(N)

题目描述 给定一个整形数组arr,返回排序后相邻两数的最大差值 arr = [9, 3, 1, 10]。如果排序,结果为[1, 3, 9, 10],9和3的差为最大差值,故返回6。 arr = [5, 5, 5, 5]。返回0。 [要求] 时间复杂度为O(n),空间复杂度为O(n)

思路

本题求排序后相邻两个数的最大差值,对于n个数字,其大小范围为:【min,max】 那么可以有推论:

最大差值>=width/n-1 取到最小值时,恰好所有数字之间间隔相等

本题的通排序做法是:

初始化一定数量的桶,每个桶的表示范围为width/n-1 总共n+1个桶,那么每个数字可以映射到不同的桶

cf470bb48c98413b4e1e84bc43b20204.png

总共数字的范围是:min=>max 而总共两两之间的区间个数为 n-1 那么直接设定桶的数量为n

每个桶的映射范围大小为:width/n-1 那么 最大差值的两个数一定分布在不同的桶。*

具体到每个桶,其只需要记录所在桶的数字中最大值,最小值即可。因为最大差值由于分布在不同的桶:

当前桶的最小值-减去上一个桶的最大值(过滤掉没有数值的桶) 遍历一遍桶即可找到最大差值

@TOC

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值