美国国旗排序优化

时间:2011-11-24 21:50:33

标签: algorithm radix-sort bucket-sort

我正在尝试实施American Bucket Sort。维基说:“首先计算落入每个垃圾箱的物体数量,然后将每个物体放入垃圾桶。”

在第二阶段,当将物体放置在适当的桶中时,我是否需要使用辅助阵列?有没有办法通过在线性时间交换数组元素来做到这一点?

1 个答案:

答案 0 :(得分:1)

假设您的意思是http://en.wikipedia.org/wiki/American_flag_sort,那么正如文章在顶部指出的那样,您可以就地运行(尽管这不是一个稳定的排序)。主要思想是指向第一个未读入的项目,最初为0,以及一个临时变量来保存一个项目。

作为第一步,你看指针并拿起它指向的项目。现在您可以使用索引将其放置到位。除非它的位置是您最初读取的位置,否则您将要覆盖另一个项目,因此您将已拾取的项目与要覆盖的项目交换,并且您现在正在持有不同的临时项目 - 并查看它应该去哪里继续。

最后你已经把东西放到了你读的地方,所以你可以增加读指针,跳过你已经编写了分类项目的区域,选择一个不同的项目,然后继续进行,直到所有内容都被排序。