jsシャッフルアルゴリズムを実現し、ランダム配列を生成します.
並べ替えアルゴリズムを勉強するときは、ランダム配列がよく使われるので、ランダム配列を生成する方法が書かれています.アルゴリズムはネットワークから来ていますが、JavaScriptバージョンに変更されました.
基本的な原理はシャッフルアルゴリズムで、まずすべての要素の中からランダムに一つを選んで最初の要素と交換します.そして二つ目の後に一つの要素を選択して最後の要素と交換します.このようにして、各要素の位置における確率は1/nであることを確認することができる.
具体的なコードは以下の通りです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
*
*1からlengthまでのランダムな配列を生成します.
*
*@lengthランダム配列の長さは、パラメータが転送されていない場合、lengthはデフォルト値9となります.
*
*/
function radomAray{length}
var i
index、
temp、
arr=[length]
length=
typeof(length)==
'undefined'
9:length
for(i=
1;i<=length;i+){
arr[i-
1)=i
)
//シャッフル配列
for(i=
1;i<=length;i+){
//iからlengthまでの乱数を生成する
index=
parseInt(
Math.random()*(length-i)+i;
if(index!=i){
temp=arr[i];
arr[i]=arr[index]
arr[index]=temp;
)
)
return arr
)
基本的な原理はシャッフルアルゴリズムで、まずすべての要素の中からランダムに一つを選んで最初の要素と交換します.そして二つ目の後に一つの要素を選択して最後の要素と交換します.このようにして、各要素の位置における確率は1/nであることを確認することができる.
具体的なコードは以下の通りです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
*
*1からlengthまでのランダムな配列を生成します.
*
*@lengthランダム配列の長さは、パラメータが転送されていない場合、lengthはデフォルト値9となります.
*
*/
function radomAray{length}
var i
index、
temp、
arr=[length]
length=
typeof(length)==
'undefined'
9:length
for(i=
1;i<=length;i+){
arr[i-
1)=i
)
//シャッフル配列
for(i=
1;i<=length;i+){
//iからlengthまでの乱数を生成する
index=
parseInt(
Math.random()*(length-i)+i;
if(index!=i){
temp=arr[i];
arr[i]=arr[index]
arr[index]=temp;
)
)
return arr
)