JavaScript の質問用スレッド vol.11
var tramp=new Array('s0','s1','h0','h1','d0','d1','c0','c1');
配列をランダムバラバラに並びかえる方法を教えて下さい。
251 :
Name_Not_Found:02/07/23 00:33 ID:yG1fNPDd
>>250 for(var i = 0; i < 100; ++i) {
var j = Math.floor(Math.random()*tramp.length);
var x = tramp[0]; tramp[0] = tramp[j]; tramp[j] = x;
}
>>250 こんなのもありか。
tramp.sort( function () { return Math.floor(Math.random()*3)-1; } );
function SwapImage(ImageName, FileName1, FileName2)
{
document.images[ImageName].src = (document.images[ImageName].src.indexOf(FileName1) != -1) ? FileName2: FileName1;
}
254 :
Name_Not_Found:02/07/23 07:23 ID:eVqT0wlq
>>252 それはまずいんじゃ…sortに渡す比較関数が単なる乱数だとsortが終わらない
かもよ。
>>251,
>>252 どうも。
考えてる途中で眠り込んでしまいました。
簡単そうでやたら難しかったです、これ。
ありがとうございました。
256 :
Name_Not_Found:02/07/23 08:40 ID:nwsRAfA2
考え直したのだけど、配列の各要素についてそれを交換する
位置を乱数によって決定するのが一番よさそうだと思う。
for(var i = 0; i < tramp.length; ++i) {
var j = Math.floor(Math.random()*tramp.length;
var x = tramp[i]; tramp[i] = tramp[j]; tramp[j] = x;
}
これで計算量がO(N)だよね。シャッフルするためだけに計算量
がO(N log N)になるsortを呼ぶのは勧められない気が。もっとも
トランプの札程度ならどうでもいいという考えもあるかな。