2016-09-01 12 views
-4

文字列を降順で並べ替えるためのC++(STL)の文字列関数はありますか? そうでなければ、O(n)時間内に降順で文字列をソートする方法。文字列を降順でソートします。

+2

関数は 'sort'と呼ばれます – user463035818

+4

@ Yathartha O(n)でソートするアルゴリズムを知っていますか? –

+3

http://stackoverflow.com/questions/9107516/sorting-characters-of-a-c-string 重複 –

答えて

0

文字列をソートする機能がC++にあり、std::lessではなくstd::greaterと比較するように指示することで降順に並べ替えることができます。

ただし、O(n)時間でソートされません(O(n log n)になります)。そのためにバケットソートを使用する必要があります。

0

最も簡単な方法はstd :: sort it、次にstd :: reverse itです。 ソートはアルゴリズムからのものです。 逆はユーティリティからです。

#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 
+0

'std :: sort'を' std :: greater'と使用する方が、 'sort(begin(str)、end(str)、std :: greater ());'を並べ替えるよりもずっと簡単です。 –

+0

ええ、それは本当です。また、きちんとした方法 –

0

あなたは線形時間が必要な場合は、汎用的なソートアルゴリズム(彼らはすべてのO(n log n)平均的なケースだ)のいずれかを使用することはできません。そうです:いいえ、標準ライブラリには適切な関数が1つしかありません。

Pigeonhole sortまたは他のバケットソートのようなものがあります:可能な256文字のそれぞれの頻度を追跡し、後でその文字列を書き換えます。

char値に必要な語彙順序付けのアイデアは依然として必要ですが、正しい(降順)順序でバケツを歩いて文字列を書き直すだけです。

関連する問題