【问题标题】:american flag sort optimization美国国旗排序优化
【发布时间】:2012-01-05 23:04:33
【问题描述】:

我正在尝试实施美式桶排序。 Wiki 说“首先要计算每个 bin 中的对象数量,然后再将每个对象放入桶中。”

在第二阶段,将对象放入适当的桶中时,我需要使用辅助数组吗?有没有办法通过在线性时间内交换数组元素来做到这一点?

【问题讨论】:

  • +1:“美国国旗排序”我今天学到了新东西。

标签: algorithm radix-sort bucket-sort


【解决方案1】:

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

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

最终,您已将某些内容放入您读取的位置,因此您可以递增读取指针,跳过您已写入已排序项目的区域,拿起不同的项目,并继续进行,直到所有内容都已排序。

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    相关资源
    最近更新 更多