我正在尝试实施American Bucket Sort。维基说:“首先计算将落入每个容器中的对象数量,其次将每个对象放入其存储桶中。”
在第二阶段,将对象放置在适当的存储桶中时,是否需要使用辅助数组?有没有办法通过在线性时间内交换数组元素来做到这一点?
假设您的意思是http://en.wikipedia.org/wiki/American_flag_sort,那么正如本文顶部指出的那样,您可以就地运行此代码(尽管这不是一个稳定的排序方法)。主要思想是要有一个指向未读入的第一个项目的指针,最初是0,还有一个临时变量来保存一个项目。
第一步,您查看指针并拾取它指向的项目。现在,您可以使用索引来放置它。除非它的位置是您最初读取的位置,否则您将要覆盖另一个项目,因此您将要拾取的项目与要覆盖的项目交换,现在您持有另一个临时项目- 抬头看一看应该去哪里继续下去。
最终,您将某些东西放到了要读取的位置,因此您可以增加读取指针,跳过已经写入已排序项目的区域,拾取另一个项目,然后继续进行直到所有内容都已排序为止。