私のJavaの教科書を使用すると、ランダムに任意の配列をシャッフルするには、次のコードを使用することができることを言う:配列をシャッフルする次のアルゴリズムに違いはありますか?
for(int i = myList.length-1; i >=0; i--)
{
int j = (int)(Math.random() * (i+1));
double temp = myList[i];
myList[i] = myList[j];
myList[j] = temp;
}
でしょう私が書いた次のコードは、同じように効率的で有効なのでしょうか?
for(int i = 0; i < myList.length; i++)
{
int j = (int)(Math.random() * (myList.length));
double temp = myList[i];
myList[i] = myList[j];
myList[j] = temp;
}
私のコードをテストして、要素を適切にシャッフルします。これ以上のテキストブックのアルゴリズムを使用する理由はありますか?
そして、なぜ人々が答えを下降させているのか分かりません。投稿した人に申し訳ありません。彼らが落選した理由は何ですか? – AleksandrH
あなたのコードは間違っていますが、それは正しく表示されます(シャッフル、一様ではありません)、それは古典的な[悪いシャッフルバイアス](http://stackoverflow.com/q/859253/555045) – harold
@ AleksandrH投票数の多い方が間違っています。 (sigh)haroldのコメントが一番正しいです。 –