JavaScript实现shuffle数组洗牌操作示例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>JavaScript shuffle数组洗牌</title>

<body>

<script>

function createArray(max) {

  const arr = [];

  for(let i = 0; i < max; i++) {

    arr.push(i);

  }

  return arr;

}

function shuffleSort(arr) {

  arr.sort(()=> {

    //返回值大于0,表示需要交换;小于等于0表示不需要交换

    return Math.random() > .5 ? -1 : 1;

  });

  return arr;

}

function shuffleSwap(arr) {

  if(arr.length == 1) return arr;

  //正向思路

//  for(let i = 0, n = arr.length; i < arr.length - 1; i++, n--) {

//    let j = i + Math.floor(Math.random() * n);

  //逆向思路

  let i = arr.length;

  while(--i > 1) {

    //Math.floor 和 parseInt 和 >>>0 和 ~~ 效果一样都是取整

    let j = Math.floor(Math.random() * (i+1));

    /*

    //原始写法

    let tmp = arr[i];

    arr[i] = arr[j];

    arr[j] = tmp;

    */

    //es6的写法

    [arr[i], arr[j]] = [arr[j], arr[i]];

  }

  return arr;

}

function wrap(fn, max) {

  const startTime = new Date().getTime();

  const arr = createArray(max);

  const result = fn(arr);

  const endTime = new Date().getTime();

  const cost = endTime - startTime;

  console.log(arr);

  console.log("cost : " + cost);

}

wrap(shuffleSort, 1000);

wrap(shuffleSwap, 1000);//试验证明这种方法比第一种效率高多了

</script>

</body>

</html>

这里使用在线HTML/CSS/JavaScript代码运行工具http://tools.jb51.net/code/HtmlJsRun测试上述代码,可得如下运行结果:

原文地址:https://www.cnblogs.com/raineliflor/p/10397070.html

时间: 2024-08-25 23:22:57

JavaScript实现shuffle数组洗牌操作示例的相关文章

[LeetCode] Shuffle an Array 数组洗牌

Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. int[] nums = {1,2,3}; Solution solution = new Solution(nums); // Shuffle the array [1,2,3] and return its result. Any permutation of [1,2,3] must equally lik

uva 10710 - Chinese Shuffle(完美洗牌)

题目链接:uva 10710 - Chinese Shuffle 题目大意:给出n张牌,按照顺序排列好,进行n-1次完美洗牌,问是否可以变成原来德序列. 解题思路:根据完美洗牌的性质,于是第x张牌经过p次后德位置有x?2p,于是只需要证明第1张牌最后是否在远处即可. #include <cstdio> #include <cstring> typedef long long ll; ll pow_mod(ll a, ll n, ll mod) { ll ans = 1; while

[CareerCup] 18.2 Shuffle Cards 洗牌

18.2 Write a method to shuffle a deck of cards. It must be a perfect shuffle—in other words, each of the 52! permutations of the deck has to be equally likely. Assume that you are given a random number generator which is perfect. 这道题让我们实现一个洗牌的算法,实际上洗

洗牌问题(模拟)

题目大意: 已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去. 现在输入s1和s2的初始状态 以及 预想的最终状态s12 问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1". 解题思路: 很浅白的模拟题= = 不懂为什么别人要把它归类到广搜...所以我又重新分类了... 直接模拟就可以了,关键在于状态记录,然后判重 若s1和s2在洗牌后

Javascript 洗牌算法,打乱数组,随机获取元素

//利用洗牌算法Array.prototype.shuffle=function(){ var i,t,m=this.length; while(m){ i=Math.floor(Math.random()*m--); t=this[m]; this[m]=this[i]; this[i]=t; } return this;} var arr=[1,2,3,4,5];console.log(arr.shuffle());console.log(arr.slice(0,2));

[转]完美洗牌(Perfect Shuffle)问题

[转]原博文地址:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/02.09.md 完美洗牌算法 题目详情 有个长度为2n的数组{a1,a2,a3,...,an,b1,b2,b3,...,bn},希望排序后{a1,b1,a2,b2,....,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法. 题目来源:此题是去年2013年UC的校招笔试题,看似简单,按照题目所要

java洗牌(shuffle)简单算法(三种实现)

package shuffle;public class shuffle {//入口 public static void main(String[] args) {    pPoker a=new pPoker();    System.out.println("请验牌************");        a.getPokerPoint();    System.out.println();    System.out.println("洗牌中");  

【Java】利用Collections类下的shuffle洗牌方法改进在一定的范围内产生不重复的随机数

上次在<[Java]在一定的范围内产生不同的随机数>(点击打开链接)上所提到的方法,尽管已经解决了一定范围内产生不同随机数的问题,运行速度已经可以的,至少不会弄很久都弄不好,其实利用Collections类下的shuffle方法思想可以更清晰.速度更快地在一定的范围内产生不同的随机数. Collections类下的shuffle方法是可以随机打乱一个数组中的元素的程序,也叫做洗牌方法. 有这个方法,配合我在<[Java]Java中的Collections类--Java中升级版的数据结构&

javascript里面的数组,json对象,动态添加,修改,删除示例

1 <!DOCTYPE html> 2 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 6 <title>javascript里面的数组,json对象,动态添加,修改,删除示例</title> 7 <script src="http://ajax.go