0

まず、タイトルが自分のやりたいことにふさわしいかどうかわかりません。多分それは別の名前を持っています。

それで、私が次のように順序付けられたリストを持っているとしましょう:

dog1
dog2
dog3
cat1
cat2
cat3
hen1
hen2
hen3

そして私が欲しいのは

dog1
cat1
hen1
dog2
cat2
hen2
dog3
cat3
hen3

このための標準的なアルゴリズムはありますか、それともユーザーの選択ですか?私が考えていたのは、最初にそれらに番号を付けてから、前にインデックスを表示することでした。

11dog1
22dog2
33dog3
14cat1
25cat2
36cat3
17hen1
28hen2
39hen3

そこから、それらを並べ替えてから、インデックスを削除します。もっとエレガントな方法はありますか?

4

2 に答える 2

0

私の考えは、各行を個々の配列に分割することです。

array1 -> dog1, dog2, dog3
array2 -> hen1, hen2, hen3
array3 -> cat1, cat2, cat3

次に、結果を格納する別の配列を作成し、次のようにします。

string result[array1.length + array2.length + array3.length];
int counter = 0;
for(int i = 0; i < array1.length; i++) {
    result[counter] = array1[i];
    result[counter + 1] = array2[i];
    result[counter + 2] = array3[i];

    counter += 3;
}
于 2012-11-22T19:15:25.483 に答える
0

1つの方法は、次のように「<」演算子をオーバーロードすることです。dog1 <dog2、dog1 <cat1 .. ..

意味AB<CD=(B <D)または(B ==DかつA<C)の場合にのみ真

ここで、Aは文字部分、BはABの数値部分です。

于 2012-11-22T21:47:39.163 に答える