时间:2021-12-29 11:14:12
基本原理
洗牌算法是一种将一组数据随机排列的算法,保证每一个元素重新被分配到任何一个位置上的几率都是均等的,是保证随机程度的关键。
每次随机选取一个数,然后将该数与数组中最后(或最前)的元素相交换(如果随机选中的是最后/最前的元素,则相当于没有发生交换);然后缩小选取数组的范围,去掉最后的元素,即之前随机抽取出的数。重复上面的过程,直到剩余数组的大小为1,即只有一个元素时结束。
完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>洗牌算法</title>
</head>
<body>
<script>
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
document.writeln(arr)
document.writeln("<p>洗牌算法=></p>")
function pockerAlgorithm(arr) {
let len = arr.length
arr.forEach((item, index) => {
let max = len - index - 1 // cal max position
let pos = Math.floor(Math.random() * (max + 1))
console.log(max + " " + pos)
let temp = arr[pos]
arr[pos] = arr[max]
arr[max] = temp
})
return arr
}
document.writeln(pockerAlgorithm(arr) + "<br>")
document.writeln(pockerAlgorithm(arr) + "<br>")
document.writeln(pockerAlgorithm(arr) + "<br>")
</script>
</body>
</html>