javascript实现洗牌算法

洗牌算法是将原来的数组进行打散,使原数组的某个数在打散后的数组中的每个位置上等概率的出现。

1、抽牌法,随机从原数组抽取一个数到新数组中,原数组则删除抽中的数。

function shuffle_pick(arr){
  var len = arr.length;
  var arr2 = new Array();
  for(var i=len;i>0;i--){
    var rand = Math.floor(Math.random()*i);
    arr2.push(arr[rand]);
    arr.splice(rand,1);
  }
  return arr2;
}

2、第一种方法的优化,不删除原数组的数,而是将最后一张未抽取的数放到被抽中的那个空位置。

function shuffle_pick(arr){
  var len = arr.length;
  var arr2 = new Array();
  for(var i=len;i>0;){
    var rand = Math.floor(Math.random()*i);
    arr2.push(arr[rand]);
    arr[rand] = arr[--i];
  }
  return arr2;
}

3、换牌法,将第i张与随机位置进行交换,换完一轮即可。

function shuffle_swap(arr){
  var len = arr.length;
  for(var i=0;i<len;i++){
    var rand = Math.floor(Math.random()*(i+1));
    [arr[i],arr[rand]] = [arr[rand],arr[i]];
  }
  return arr;
}
原文地址:https://www.cnblogs.com/yihen-dian/p/14674671.html