基本上,程序将被给予一个项目列表,它们必须分成三个不同的“箱子”。把它想象成你正在整理三种颜色的大理石。这些项都是char类型。 谢谢你的帮助。
答案 0 :(得分:11)
这实际上并不是一个经典的“排序”问题......因为只有固定数量的可能值,这被称为分区问题,并且存在一个有效的解决方案 - 分区称为Dutch flag sort,由Edsger Dijkstra首先提出。
此算法在O( n )中运行,只需要对数组进行一次传递。
通过开发循环不变量,可以非常简单地找到算法。
答案 1 :(得分:3)
我认为这对于存储桶排序是完美的:基本上创建256个int计数的列表,每次在列表中遇到值时,递增该值的计数。然后迭代计数以使它们恢复正常。这是O(n)。
答案 2 :(得分:3)
另一种选择是对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());
答案 3 :(得分:2)
答案 4 :(得分:0)
std::sort
。然后O(n)
搜索边界。