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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM