c++ - 桶排序实现

标签 c++ arrays sorting bucket-sort

我必须实现桶排序,以便它对 size = 100 的数组进行排序,其中随机生成的数字介于 0 和 100 之间。我的桶如下所示:

Bucket0: (0<=x<10)
Bucket1: (10<=x<20)
.
.
.
Bucket9: (90<=x<100)

现在我了解了桶排序背后的理论,我将元素插入到每个单独的桶中,​​但我不明白如何实际创建桶。我是否创建了一个数组,比如 B,其中的桶本身就是数组?还是用整数实现桶排序的更标准方法?

我只需要朝着正确的方向轻推,感谢您的帮助!

最佳答案

是的。
你必须声明另一个长度为 101 的数组(我们可以说 b)。长度代表我们数字的范围。

现在您必须遍历第一个数组和每个单元格,当您找到每个数字 k (0 <= k <= 100) 时,您必须对 b[k] 进行++。像这样: b[a[i]]++;

现在我们有数组 b 代表每个数字 的次数k 出现在第一个数组中。我们可以覆盖第一个数组:

for(int i = 0; i <= RANGE; i++)
    for(int j = 0; j < b[i]; j++)
        a[p++] = i;

在您的情况下,RANGE 是 100。

复杂度:O(n)

请注意,我们可以用一个变量而不是使用数组来实现它,数组做的是同样的事情,但每次都是不同的数字。 节省的不是很多,而是节省了一点空间的复杂性。

关于c++ - 桶排序实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46734266/

相关文章:

c++ - ptxas 文件中的 CUDA 外部类链接和未解析的外部函数

c# - 从 C# 在 asp.net 中动态显示图像

java - 如何对 LinkedHashMap Arraylist<LinkedHashMap<String,String> 的 Arraylist 进行排序?

iphone - 如何让sortedArrayUsingSelector使用整数而不是字符串进行排序?

sorting - 如何对文本 block 进行排序?

c++ - 循环依赖问题

c++ - 如何通过交叉广播恢复接口(interface)

c++ - 如何优化这段代码?

java - 我应该使用哪个数组/列表来保留静态索引?

javascript - 如何在用户输入中写入数组的编号并获取该特定数组编号的信息?