【对一个数组进行随机排序有哪些写法? _变量 _表达式和运算符 _函数 】 | IT修真院·坑乎
问题已收录 对一个数组进行随机排序有哪些写法?
我也踩过这个坑( 1 )
已统计您的踩坑,无需重复点击
回答(1)
变量 表达式和运算符 函数
详细描述
截图
代码
编辑于2024-11-20
  • [深圳|结业弟子]JS-钟俊
    0

    要了解随机排序,这里你就要了解到洗牌算法了;

    洗牌算法有很多种,这里给你介绍一种我比较喜欢也比较好用的;

    好用不只是用起来方便,更指洗出来的随机数比较均匀;


    Fisher-Yates Shuffle 上代码

    function shuffle(array) {
    var m = array.length, t, i;
       while (m) {
    i = Math.floor(Math.random() * m--);
           t = array[m];
           array[m] = array[i];
           array[i] = t;
       }
    return array;
    }

    原理:

    为了实现就地随机乱序,然后选择一个随机的剩余元素(从前面)并放置在它的新位置(在后面)。

    后面的未洗过的元素被交换到前面,等待随后的随机;

    加上代码,理解起来还是十分简单的;


    而且更重要的是它的随机性能非常好,Fisher-Yates随机置乱算法是无偏的,所以每个排列都

    是等可能的,当前使用的Fisher-Yates随机置乱算法是相当有效的,需要的时间正比于要随机

    置乱的数,不需要额为的存储空间开销。

    编辑于2018-09-14