Bucket sort创建k个桶......并在其中一个桶中分配n个数字。 Eg.1-10, 11-20, 21-30 ... 为O(n + k)的
使用插入O(n²)
对存储桶中的编号进行排序当少数数字在同一个桶中结束时,它工作正常.. O(n + k) 但如果所有数字都在同一个桶中...... O(n²)
我的问题是,如果我们将范围的桶设为1,即0-1 1-2, 2-3 ..... 不同的no.s不会在同一个桶中结束....(不需要在桶内排序) 为O(n + k)的
如果不考虑空间复杂性,为什么我们不使用它而不是计算排序? 如果我错了,Plzz会纠正我。
答案 0 :(得分:2)
您建议使用名为 count sort 的分发排序,只是一个更简单的版本,您知道元素不重复,因此计数在1
处停止。它在时间O(N+n)
非常有效,但确实需要O(N)
空间。
当被要求对一副卡片进行分类时,很多人会自然地使用这种方法:他们会将每张卡片发送到桌子上的位置,以形成4行13张卡片。最后一步是逐行收集卡片。在这里,我们有N == n
,因为这两个步骤都需要O(n)
次,所以排序非常有效。
当N
变得比n
大得多时,假设您想按照序列号的顺序对20美元的钞票进行排序,这种方法变得完全不切实际。
如果要对整数进行排序,可以考虑使用O(n)
时间复杂度的另一种方法:基数排序。
答案 1 :(得分:0)
k的值在第一种方法和你提出的方法中是不一样的。假设您有0到N之间的n个数字。在第一种情况下(大小为10的桶),您需要N / 10桶,在第二种情况下(桶大小为1)N桶。根据N和n的相对值,k将是最优的,其可能不是k = 1.