存储桶排序实现

时间:2017-10-13 16:28:30

标签: c++ arrays sorting bucket-sort

我必须实现一个存储桶排序,以便使用size = 100对数组进行排序,并在0到100之间随机生成数字。我的存储区如下:

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

现在我理解了桶排序背后的理论,我将元素插入到每个桶中,但我不知道如何实际创建桶。我创建一个数组说B,其中桶是数组本身吗?或者是使用整数实现桶排序的更标准方法?

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

1 个答案:

答案 0 :(得分:1)

是。
你必须声明长度为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)

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