2

次の値があるとします:-

xyz12@abc
xyz1@abc
xyz15@abc
xyz2@abc
xyz22@abc

ソートされた出力を次の形式にしたい:-

xyz1@abc
xyz2@abc
xyz12@abc
xyz15@abc
xyz22@abc

strcmp を使用すると、文字ごとに比較され、xyz1@ > xyz12 が @ > 2 として返されますが、これは望ましくありません。これを必要な形式でソートするには、どのようなアルゴリズムを使用できますか??

4

4 に答える 4

3

お探しの Google キーワードは「ナチュラル ソート」です。

于 2012-04-09T20:30:54.483 に答える
0

ソートユーティリティがどのように実装されているかを見てください。

$ 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

于 2012-04-09T20:26:21.740 に答える
0

XYZ が常に同じ場合は、整数値でカウント ソートを使用します。それ以外の場合は、一般的な比較ベースの並べ替えをカスタム コンパレータ (つまりMerge sort ) と共に使用するのがおそらく最も簡単な方法です。

ジェネリックとは、いくつかのコンパレータ関数を受け入れる準備ができている、事前にプログラムされた並べ替えアルゴリズムを使用することを意味します (通常、A > B の場合は 1 を返し、A < B の場合は -1 を返し、それ以外の場合は 0 を返します)。

于 2012-04-09T20:54:41.223 に答える
-1

このウェブサイトをご覧になることを強くお勧めします。

http://www.c.happycodings.com/Sorting_Searching/index.html

そこには、C のソート アルゴリズムの分岐があります。明らかに、パフォーマンスが優れているもの (nlogn) を使用してください。

于 2012-04-09T20:36:04.593 に答える