美文网首页
乱序问题-洗牌算法

乱序问题-洗牌算法

作者: 0月 | 来源:发表于2019-02-17 15:14 被阅读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中的随机一个,如此下去。

    相关文章

      网友评论

          本文标题:乱序问题-洗牌算法

          本文链接:https://www.haomeiwen.com/subject/aqjweqtx.html