【发布时间】:2011-03-02 21:53:11
【问题描述】:
基本上,程序将获得一个项目列表,并且必须将它们分类到三个不同的“箱”中。把它想象成你正在对三种颜色的弹珠进行分类。这些项目都是char类型。 感谢您的帮助。
【问题讨论】:
-
有趣的是,我遇到了完全相同的问题。我想我认识这个人。是的,这是家庭作业,是的,我们可以使用互联网寻求帮助。感谢所有建议。
标签: c++ algorithm optimization sorting
基本上,程序将获得一个项目列表,并且必须将它们分类到三个不同的“箱”中。把它想象成你正在对三种颜色的弹珠进行分类。这些项目都是char类型。 感谢您的帮助。
【问题讨论】:
标签: c++ algorithm optimization sorting
这并不是一个真正的经典“排序”问题……因为只有固定数量的可能值,这被称为 分区 问题,并且对于这三个问题存在一个有效的解决方案——称为Dutch flag sort 的方式分区,由 Edsger Dijkstra 首次提出。
此算法在 O(n) 中运行,并且只需要遍历数组。
通过开发循环不变量也可以相当简单地找到该算法。
【讨论】:
我认为这非常适合桶排序:基本上创建一个包含 256 个 int 计数的列表,每次在列表中遇到一个值时,增加该值的计数。然后迭代计数以将它们按顺序放回原处。这是 O(n)。
【讨论】:
另一种选择是两次调用partition:
vector<char> v(2000);
...
std::partition(
std::partition(
v.begin(),
v.end(),
function_to_match_first_value()),
v3.end(),
function_to_match_second_value());
【讨论】:
【讨论】:
std::sort。然后O(n) 搜索边界。
【讨论】: