2016-08-31 21 views
-10

私は同じサイズのいくつかの文字列を並べ替えたい。文字列のサイズは非常に大きい(10^18)ことができます。どのように私はすべての入力された文字列のサイズが最小限の時間ですべてのそれらの文字列を並べ替えることができますequal.How私はより速い時間でこれらの文字列を並べ替えることができます。C++で文字列を整数でソートする方法はありますか?

922003001020293839297830207344987344973074734 
766352786207892397340783784078348747606208602 
182823068326283756515117829362376823572395775 
//the size of all string is equal 

誰かがより良いソート方法を説明してください。

+4

[ 'のstd :: sort'(http://en.cppreference.com/ w/cpp/algorithm/sort) – NathanOliver

+0

はすべて同じ数字ですか?だから、彼らは文字列の並べ替えを使用して細かい並べ替えを行います – pm100

+0

可能な重複? http://stackoverflow.com/questions/5897319/how-to-use-stdsort-to-sort-an-array-in-c – macco

答えて

1

ここでは、STDで行うの::ヘッダアルゴリズムからソート

#include <iostream> 
#include <string> 
#include <algorithm> 
#include <vector> 

int main(){ 

    std::vector<std::string> nums{ 
     "922003001020293839297830207344987344973074734", 
     "766352786207892397340783784078348747606208602", 
     "182823068326283756515117829362376823572395775" 
    }; 


    std::cout << "unsorted: " << std::endl; 
    for (auto i : nums){ 
     std::cout << i << std::endl; 
    } 

    std::sort(nums.begin(), nums.end()); //sort it 


    std::cout << "\nsorted: " << std::endl; 
    for (auto i : nums){ 
     std::cout << i << std::endl; 
    } 

    system("pause"); 
    return 0; 
} 

出力:

unsorted: 
922003001020293839297830207344987344973074734 
766352786207892397340783784078348747606208602 
182823068326283756515117829362376823572395775 

sorted: 
182823068326283756515117829362376823572395775 
766352786207892397340783784078348747606208602 
922003001020293839297830207344987344973074734 
+0

std :: qsortのためにしてください。文字列の総数が入力されます –

+1

なぜstd :: qsortを使いたいのですか? std :: sortはとてもシンプルです –

+0

@JahirulIslamMonirなぜ 'qsort'を使う必要がありますか? C++でプログラミングする場合は、古いC関数の代わりにC++アルゴリズムを使用します。 –

1

ちょうどので、あなただけのベクトルをvectorに各stringを入れ、単にsortので、数字だけを含む文字列は、アルファベット順ソート可能であることであることを起こります。

これは、「数字」の桁数がすべて同じ場合にのみ有効です。そうでなければ、それらの文字列がすべて同じ長さになるように、先頭にゼロを付けて文字列をパディングする必要があります。ベクトルをソートしたら、先頭のゼロを削除することができます。

+4

それらはすべて同じ桁数を持つ場合にのみ該当します。通常の文字列ソートは、 '' 2 "'の前に '' 10 ''を置くでしょう。 –

+0

文字列を数値に変換してベクトルに格納し、並べ替えて変換したり、パッドに変換する方が速いでしょうか? –

+0

最初に長さを比較し、同じ長さの場合にのみ辞書編集の比較を行うほうが速いでしょう。 –

関連する問題