javascript 取不重复随机数问题

今天研究了下关于脚本取不重复随机数问题,大致有3个算法.

 

  1. //1.采用sort()排序
  2.     function aa()
  3.     {
  4.         var r = [];
  5.         for(var i = 0; i < 10000; i++)
  6.         {
  7.             r[i] = i;
  8.         }
  9.         var   tstart=new   Date().getTime();             
  10.          r.riffle();
  11.          var   tend=new   Date().getTime(); 
  12.          alert("花费时间为   "+(tend-tstart)+"   毫秒")   
  13.     }
  14.     Array.prototype.riffle = function(){    
  15.       this.sort(function(){
  16.        return Math.random() > 0.5 ? 1 : 0;
  17.   });
  18.  }
  19. //2.洗扑克牌
  20.     var   array1=new   Array();  
  21.     for(var   i=0;i<10000;i++){  
  22.     array1[i]=i;  
  23.     }  
  24.     Array.prototype.Random=function()     
  25.     {  
  26.         for(var i=0;i<this.length;i++){  
  27.         var   rnd=Math.floor(Math.random()*this.length)  
  28.         var   swap=this[i];this[i]=this[rnd];this[rnd]=swap;  
  29.     }  
  30.         return   this  
  31.     }
  32.     var   tstart=new   Date().getTime();  
  33.     array1.Random();
  34.     var   tend=new   Date().getTime(); 
  35.     alert("花费时间为   "+(tend-tstart)+"   毫秒")    
  36. //3.抽取
  37.     var   array1=new   Array();  
  38.     for(var   i=0;i<10000;i++){  
  39.       array1[i]=i;  
  40.     }  
  41.     Array.prototype.Random=function()     
  42.     {  
  43.       var   ret=new   Array(0);  
  44.       for(var   i=this.length;i>0;i--){  
  45.           var   rnd=Math.floor(Math.random()*this.length);  
  46.           ret[ret.length]=this[rnd];  
  47.           this.splice(rnd,1);  
  48.         }  
  49.         return   ret; 
  50.     }  
  51.     var   tstart=new   Date().getTime();  
  52.     array1.Random();
  53.     var   tend=new   Date().getTime(); 
  54.     alert("花费时间为   "+(tend-tstart)+"   毫秒")   

做完实验,第2个最快,第3个最慢,基本上第3个速度比第一个慢10倍,第一个比第2个慢10倍.

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值