乱序问题-洗牌算法

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中的随机一个,如此下去。

上一篇下一篇

猜你喜欢

热点阅读