电脑爱好者之家移动版

主页 > 开发资料 > 程序设计教程 > javascript >

JavaScript(洗牌算法)随机打乱数组元素的位置

 
[javascript] view plaincopyprint?
  1. function mess(arr){  
  2.     var _floor = Math.floor, _random = Math.random,  
  3.         len = arr.length, i, j, arri,  
  4.         n = _floor(len/2)+1;  
  5.     while( n-- ){  
  6.         i = _floor(_random()*len);  
  7.         j = _floor(_random()*len);  
  8.         if( i!==j ){  
  9.             arri = arr[i];  
  10.             arr[i] = arr[j];  
  11.             arr[j] = arri;  
  12.         }  
  13.     }  
  14.     return arr;  
  15. }  
  16. var testa = [1, 2, 3, 4, 5, 6, 7];  
  17. mess(testa);  
  18. console.log(testa);  

要注意一点的是,这是改变原数组的,不想改变原数组的话请先拷贝原数组:

 

[javascript] view plaincopyprint?
  1. var testa = [1, 2, 3, 4, 5, 6, 7];  
  2. var newarr = mess( testa.slice(0) ); //这里只是浅拷贝数组   
  3. console.log(testa);  
  4. console.log(newarr);  
这个洗牌函数算好么?

 

接文章第二部分:JavaScript洗牌算法二

(责任编辑:熊猫蜀黍)