-1

並べ替えに問題があります。

配列に4つの文字列が格納されているとしましょう。これらのうち、すべての組み合わせをペアで生成したいとします。そして、これらのペアから、2つの配列位置が可能な限り最大の範囲で互いに続くことがないようにそれらをソートします

例:

String[] array = {"one", "two", "three", "four"};

// want to generate

one - two
one - three
one - four
two - three
two - four
three - four

// then sort

one - two
three - four
one - four
two - three      //two "three" after each other
one - three
two - four

(この場合、次々に2を取得するものは"three"、ソート時にランダムすぎます)

Javaでこれを行う方法がわかりません。forループをネストしてみましたが、再帰ループを教えてくれた人もいます。そして、私はしたくない:

このコードをコピーして貼り付けるだけで、すべてが機能します」私は本当にこのようなものを書く方法を理解したいと思っています。

この問題にどのように取り組むべきですか?

4

2 に答える 2

5

これがあなたではありませんJust copy paste this code and everything will work:-

ステップ1:-一時変数をに初期化します0

ステップ2:-からまでの配列を反復処理します0arr.length - temp

ステップ3:-印刷arr[i][temp] - arr[i][i + temp]

tempステップ4 :-インクリメント1

ステップ5:-を超えることはできないため、のstep 2場合は繰り返します。temp < arr.length - 1(i + temp)arr.length

したがって、指定された配列に対して、次のように出力されます。

String arr[] = {"one", "two", "three", "four"};

最初の反復(差1のインデックスペア):-

1. arr[0][0] - arr[0][1], then ("one" - "two")
2. arr[0][1] - arr[0][2],      ("two" - "three")
.. so on, 

その後、次の反復に移動します。温度を次のようにインクリメントし1ます:-

2回目の反復(差2のインデックスペア):-

1. arr[0][0] - arr[0][2], then  ("one" - "three")
2. arr[0][1] - arr[0][3]        ("two" - "four")

.. すぐ。

最後の反復(差異のあるインデックスペアarr.length - 1):-

1. max = arr.length - 1;
2. arr[0][0] - arr[0][max]      ("one" - "four")

ですから、ここにはそのようなものは何もsorting含まれていないことがわかります。ソートでこれを行おうとすると、非常に複雑になります。

于 2012-11-20T21:17:35.457 に答える
0

まず、アルゴリズムを考え出します。特定の言語を設定する必要はありません。それはあなた自身が問題を解決する方法です。

次に、それをコンピューターに翻訳します。

ここにあなたが始めるためのいくつかの擬似コードがあります。

public pair[] getPairs(string[] arr)
{

    pair[] retval;
    foreach(string s in arr)
    {
        string first = arr.first
        foreach(string s2 in arr.subArray(allbutfirst))
        {
             retval.Add(newPair(s, s2)
        }
    }
}
于 2012-11-20T21:21:56.180 に答える