有人可以帮我解决整数的桶排序算法吗?通常人们错误地说他们有这个算法,但实际上有一个计数排序!也许它的工作方式类似,但它有所不同。
我希望你能帮助我找到正确的方法,因为现在我不知道(Cormen的书和维基百科没那么有用)。
提前感谢您的所有回复。
答案 0 :(得分:4)
计数排序只适用于整数,而桶排序可以处理任何带有值的东西,最后的循环也有点不同。
Counting Sort维护一个额外的整数数组,它基本上计算了某个数字的数量,然后在最后一个循环中通过附加数组时再次创建数字,我的意思是这样 - 以OOP方式查看它,它不是同一个对象,而是一个具有相同值的新对象。
然后,我们有桶排序。 Bucket sort遍历数组,但不是仅仅在数组中的相关位置上运行++,而是将项目插入到某种类型的列表中(我喜欢使用队列,这样就是一种稳定的排序)。然后,在最后一个循环中,算法遍历整个附加数组,并将每个桶中的元素出列到数组中。这样它就是同一个对象。
如果你正在排序任何东西并且你知道数字的范围小于nlogn,那很简单 - 如果它是整数则使用计数排序,如果对象有一些额外的数据则使用bucket排序。当然,你可以对整数使用桶排序,但计算排序会占用更少的空间。
答案 1 :(得分:3)