按降序排序字符串。

时间:2016-09-01 13:49:41

标签: c++ stl

C ++(STL)中是否有字符串函数按降序对字符串进行排序。 如果没有,如何在O(n)时间内按降序对字符串进行排序。

3 个答案:

答案 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值所需的词法顺序,但是您只需通过以正确(降序)顺序遍历您的桶来重写字符串。