C ++(STL)中是否有字符串函数按降序对字符串进行排序。 如果没有,如何在O(n)时间内按降序对字符串进行排序。
答案 0 :(得分:0)
C ++中有一个函数可以对字符串进行排序,您可以通过告诉它与std::greater
而不是std::less
进行比较来使其按降序排序。
但是,它不会在O(n)时间内排序(它将是O(n log n))。您将需要使用桶排序。
答案 1 :(得分:0)
最简单的方法是std :: sort it,然后std :: reverse it。 sort来自算法。 反向来自效用。
#include <iostream>
#include <string>
#include <algorithm>
#include <utility>
int main(){
std::string str = "Hello Beep 5412";
std::cout << "normal string:" << std::endl;
std::cout << str << std::endl;
std::sort(str.begin(), str.end()); //sort it
std::reverse(str.begin(), str.end()); //reverse it
std::cout << "\nsorted, descending:" << std::endl;
std::cout << str << std::endl;
system("pause");
return 0;
}
输出:
normal string:
Hello Beep 5412
sorted, descending:
polleeeHB5421
答案 2 :(得分:0)
如果您需要线性时间,则无法使用任何通用排序算法(它们都是O(n log n)
平均情况)。所以:不,标准库中没有一个合适的函数。
类似于Pigeonhole sort或其他存储桶排序的工作方式:只跟踪256个可能字符中每个字符的频率,然后重新写入字符串。
请注意,您仍然需要了解char值所需的词法顺序,但是您只需通过以正确(降序)顺序遍历您的桶来重写字符串。