Algorithm 什么使水桶排序好?

Algorithm 什么使水桶排序好?,algorithm,sorting,bucket-sort,Algorithm,Sorting,Bucket Sort,因此,我偶然发现了基于非比较排序的算法,确切地说,是桶排序,但我无法确切地理解为什么它是好的 我有一个想法,但我需要有人来证实 假设我想对一个1000个元素的数组进行排序,如果它是均匀分布的,并且被分成10个桶,每个桶有100个元素 使用n log(n)算法对100个元素进行10次排序=10*100 log(100)=1000 log(100)=2000 使用n log(n)算法对1000个元素进行排序时=1000 log(1000)=3000 因此,该算法利用了,如果n=m+l,那么(m+l)

因此,我偶然发现了基于非比较排序的算法,确切地说,是桶排序,但我无法确切地理解为什么它是好的

我有一个想法,但我需要有人来证实

假设我想对一个1000个元素的数组进行排序,如果它是均匀分布的,并且被分成10个桶,每个桶有100个元素

使用n log(n)算法对100个元素进行10次排序=10*100 log(100)=1000 log(100)=2000

使用n log(n)算法对1000个元素进行排序时=1000 log(1000)=3000

因此,该算法利用了,如果n=m+l,那么(m+l)^2>m^2+l^2,这同样适用于n个log(n)算法

因此,数据的弯曲越均匀,桶排序的性能就越好

是这样吗


最佳桶数是多少?(我觉得这是一种时空权衡,但也取决于所排序数据的一致性)

但您必须考虑到,bucketing步骤的复杂性为1000。 这将为您提供:

  • 桶排序:
    1000+10*100日志(100)=3000
  • 比较排序:
    1000*日志(1000)=3000
但您可以再次应用bucketing策略对较小的数组进行排序。这是

广告的复杂度是
O(n.w)
,其中
w
是表示元素的位数。线性的比合并排序好?等一下,
w
通常有多大?是的,对于通常的数据集,您必须使用
log(n)
位来表示元素,所以回到
nlog(n)

正如您所说的,这是一种时间/内存交易,基数排序是指当您有固定内存预算时(但谁没有呢?)。如果您可以随着输入大小线性增长内存,那么使用
n
bucket,您就有了
O(n)
排序

示例参考(有很多!):