美文网首页
javascript实现乱序数组——洗牌算法

javascript实现乱序数组——洗牌算法

作者: 踏莎行 | 来源:发表于2021-04-21 17:31 被阅读0次

使用sort()函数实现

关于sort的使用,可以看这篇内容https://www.jianshu.com/p/80b814871ac7
sort方法中传入一个函数,

arr.sort(function(a, b){
    return a - b
})
return a-b的结果 ab的排序结果
负数 a排在b之前
0 不会进行排序
正数 b排在a的前面

结合这个函数的特点加上随机数,我们就可以实现一个乱序数组了

    var arr = [1, 2, 3, 4, 5]
    function ramdomArr(a, b){
      return Math.random() - 0.5
    }
    console.log(arr.sort(ramdomArr));

随机数是生成0-1之间的,我们用这个随机数去减0.5就会得到不同的正数和负数,再利用sort方法,就能实现一个乱序数组了。

Fisher–Yates shuffle洗牌算法

使用sort实现的乱序貌似是实现了,由于浏览器的对随机数实现机制,这种乱序并非真正意义上的乱序,目前最好的实现方式就是洗牌算法了
原理
首先从所有元素中随机选取一个与第一个元素进行交换,然后在第二个之后选择一个元素与第二个交换,直到最后一个元素
实现一

var arr = [1, 2, 3, 4, 5]
var shuffle = function (arr) {
  for (var i = arr.length - 1; i >= 0; i--) {
    var randomIndex = Math.floor(Math.random() * (i + 1));
    var itemAtIndex = arr[randomIndex];
    arr[randomIndex] = arr[i];
    arr[i] = itemAtIndex;
  }
  return arr;
}

var res = shuffle(arr)
console.log(res); // (5) [3, 5, 2, 1, 4]

实现二

var shuffle = function (arr) {
  var newArr = []
  while(arr.length != 0){
    var rand = Math.floor((Math.random() * arr.length))
    newArr.push(arr[rand])
    arr.splice(rand, 1)
  }
  return newArr
}

相关文章

  • javascript实现乱序数组——洗牌算法

    使用sort()函数实现 关于sort的使用,可以看这篇内容https://www.jianshu.com/p/8...

  • 将一个数组乱序输出

    在Javascript可能有这样的需求:将一个数组乱序输出,推荐两种方法。 1、splice()方法 2、洗牌法 效率高

  • 一行代码-杀手级的 JS

    数组乱序 在使用需要某种程度的随机化的算法时,你会经常发现洗牌数组是一个相当必要的技能。 下面的片段以O(n lo...

  • 乱序问题-洗牌算法

    场景 在电商系统里面的“猜你喜欢”的“换一批”功能新闻推荐列表的换一批等 原理就是将一个数组进行乱序处理;是一个非...

  • 算法题目4:数组打乱顺序

    (一)Fisher–Yates shuffle 洗牌算法是最完美乱序的算法/方法之一. (二) sort这不是真正...

  • [underscore 源码学习] 乱序数组 - 洗牌算法

    洗牌算法 算法思路在宏观上可以概括为:将集合视为牌堆,不停地从牌堆中抽牌构成新的牌堆,直至新牌堆的牌数到达预设数量...

  • 算法练习(110): 乱序检查(1.1.36)

    知识点 洗牌算法 随机数 1.1.36 乱序检查。通过实验检查表1.1.10 中的乱序代码是否能够产生预期的效果...

  • 笔试题

    实现继承 防抖 节流 reduce实现map 二叉树遍历 数组去重 斐波那契数列 调度器 数组快排 洗牌算法 (打...

  • 面试题总结

    算法思维 简述归并排序归并排序是一个使用分治策略来对乱序数组进行排序的算法,使用的思想是将乱序数组不断切割分解成若...

  • 实现数组乱序

    实现数组乱序有以下三种方式: 直接在sort函数里面传入一个乱序的function 存在的问题:如果每两个元素之间...

网友评论

      本文标题:javascript实现乱序数组——洗牌算法

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