次の値があるとします:-
xyz12@abc
xyz1@abc
xyz15@abc
xyz2@abc
xyz22@abc
ソートされた出力を次の形式にしたい:-
xyz1@abc
xyz2@abc
xyz12@abc
xyz15@abc
xyz22@abc
strcmp を使用すると、文字ごとに比較され、xyz1@ > xyz12 が @ > 2 として返されますが、これは望ましくありません。これを必要な形式でソートするには、どのようなアルゴリズムを使用できますか??
お探しの Google キーワードは「ナチュラル ソート」です。
ソートユーティリティがどのように実装されているかを見てください。
$ cat test.txt | sort
xyz12@abc
xyz15@abc
xyz1@abc
xyz22@abc
xyz2@abc
今-Vスイッチで...
$ cat test.txt | sort -V
xyz1@abc
xyz2@abc
xyz12@abc
xyz15@abc
xyz22@abc
http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/sort.c
XYZ が常に同じ場合は、整数値でカウント ソートを使用します。それ以外の場合は、一般的な比較ベースの並べ替えをカスタム コンパレータ (つまりMerge sort ) と共に使用するのがおそらく最も簡単な方法です。
ジェネリックとは、いくつかのコンパレータ関数を受け入れる準備ができている、事前にプログラムされた並べ替えアルゴリズムを使用することを意味します (通常、A > B の場合は 1 を返し、A < B の場合は -1 を返し、それ以外の場合は 0 を返します)。
このウェブサイトをご覧になることを強くお勧めします。
http://www.c.happycodings.com/Sorting_Searching/index.html
そこには、C のソート アルゴリズムの分岐があります。明らかに、パフォーマンスが優れているもの (nlogn) を使用してください。