配列ランダム並べ替え:シャッフルアルゴリズム(Fisher–Yates shuffle)
2121 ワード
原理と手順
1.配列を定義し、長さ(length)は元の配列長さ2.0からindex(初期0)のランダム値rand、shuffled=shuffled[rand]、shuffled[rand]=arr[index]3.index+;第二のステップは、index=length-1まで単純にはshuffledが0からlength-1までの割当プロセスであり、新たに加わった値はarr[index]である.
コードの実装
1.コード1
2.コード二
参考資料
Fisher–Yates shuffleシャッフルアルゴリズム JavaScript学習ノート:配列ランダムソート シャッフルアルゴリズム:配列をランダムに並べ替えます。 シャッフルアルゴリズムFisher_Yatesの原理
1.配列を定義し、長さ(length)は元の配列長さ2.0からindex(初期0)のランダム値rand、shuffled=shuffled[rand]、shuffled[rand]=arr[index]3.index+;第二のステップは、index=length-1まで単純にはshuffledが0からlength-1までの割当プロセスであり、新たに加わった値はarr[index]である.
コードの実装
1.コード1
function random(min, max) {
if (max == null) {
max = min;
min = 0;
}
return min + Math.floor(Math.random() * (max - min + 1));
};
function shuffle(arr) {
var length = arr.length, shuffled = Array(length);
for (var index = 0, rand; index < length; index++) {
rand = random(0, index);
if (rand !== index) shuffled[index] = shuffled[rand];
shuffled[rand] = arr[index];
}
return shuffled;
}
テストケース:var arr = ['dfewfew', 2, 3, 4, 5, 6, 7, "fdf'", { kdofkod, jiji, miojim }];
shuffle(arr);
コンサート出力:[3, "dfewfew", 7, 2, 4, Array(3), "fdf'", 5, 6]
そのうち、Aray(3):length:3:「kdofkod」1:「jiji」2:「miojim」2.コード二
function shuffle(arr) {
var i, j, temp;
for (i = arr.length - 1; i > 0; i--) {
j = Math.floor(Math.random() * (i + 1));
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
return arr;
};
テストケース:var arr = ['dfewfew', 2, 3, 4, 5, 6, 7, "fdf'", { kdofkod, jiji, miojim }];
shuffle(arr);
コンサート出力:[7, 3, "dfewfew", "fdf'", Array(3), 4, 6, 2, 5]
そのうち、Aray(3):length:3:「kdofkod」1:「jiji」2:「miojim」参考資料
Fisher–Yates shuffleシャッフルアルゴリズム JavaScript学習ノート:配列ランダムソート シャッフルアルゴリズム:配列をランダムに並べ替えます。 シャッフルアルゴリズムFisher_Yatesの原理