0

奇妙な質問があります: このような数値の配列を注文するスマート/最良の方法はどれですか?

[1,1,2,2,3,3,4,4] 

これに

[1,2,3,4,1,2,3,4]

アイデアは、リストの各要素にある種の優先順位を与えるために、リストのバランスを取ることです。言語はphpかもしれませんが、それほど重要ではありません

4

2 に答える 2

1

[1,1,2,2,2,2,3,3]あるとしましょう。同じ数の最初のセットを取り、それを別々の配列に入れます(垂直方向)。

1 1 

同じ数の2番目のセットについても同様です。

1 1 
2 2 2 2
3 3 3

配列を連結して結果を取得します

[1,2,3][1,2,3][2,3][2]
于 2012-07-26T13:40:12.410 に答える
0

配列内の各要素を繰り返し処理し、それを 2 番目の配列にコピーします。各要素には、シーケンス番号である 2 番目の並べ替えキーも含まれます。

それでは、入力配列 A を呼び出しましょう。

最初:ソートA

次に: A を反復処理し、各要素を新しい配列 B にコピーします。ここで、各要素には 2 番目の並べ替えキーがあり、それらを key1 および key2 と呼びます。Key1 は A からの値、key2 はシーケンス番号です。

A: 1,1,2,2,3,3,4,4
B: (1,1),(1,2),(2,1),(2,2),(3,1),(3,2),(4,1),(4,2)

ここで、最初に key2 で、次に key1 で順序付けする B の要素の比較関数を作成します。

bool isSmallerThan( x, y )
{
   if ( x.key2 < y.key2 ) return true;
   if ( x.key2 > y.key2 ) return false;
   if ( x.key1 < y.key1 ) return true;
   return false;
}

次に、新しい比較関数を使用して B を並べ替えます。

B を反復処理し、すべての key1 を A にコピーして戻します。

于 2012-07-26T13:42:06.623 に答える