乱序问题-洗牌算法
2019-02-17 本文已影响0人
0月
场景
在电商系统里面的“猜你喜欢”的“换一批”功能
新闻推荐列表的换一批等
原理就是将一个数组进行乱序处理;是一个非常简单常用的需求。
在业界它叫做洗牌算法Fisher–Yates shuffle
下面我就用js实现一次
function shuffle(array){
let arr = [...array]
let length = arr.length
for(let i = 0; i < length; i++){
let randomIndex = i + Math.floor((Math.random() * (length - i)))
let t = arr[i]
arr[i] = arr[randomIndex]
arr[randomIndex] = t
}
return arr
}
按照数组长度循环一次
每次都拿当前项 和 随机一个未循环到的项 两两交换。
有一个数组长度是5,第一次循环,arr[0] 和 arr[n]互相交换,n是1,2,3,4中的随机一个; 第二次循环,arr[1] 和 arr[n]互相交换,n是2,3,4中的随机一个,如此下去。