今天研究了下关于脚本取不重复随机数问题,大致有3个算法.
- //1.采用sort()排序
- function aa()
- {
- var r = [];
- for(var i = 0; i < 10000; i++)
- {
- r[i] = i;
- }
- var tstart=new Date().getTime();
- r.riffle();
- var tend=new Date().getTime();
- alert("花费时间为 "+(tend-tstart)+" 毫秒")
- }
- Array.prototype.riffle = function(){
- this.sort(function(){
- return Math.random() > 0.5 ? 1 : 0;
- });
- }
- //2.洗扑克牌
- var array1=new Array();
- for(var i=0;i<10000;i++){
- array1[i]=i;
- }
- Array.prototype.Random=function()
- {
- for(var i=0;i<this.length;i++){
- var rnd=Math.floor(Math.random()*this.length)
- var swap=this[i];this[i]=this[rnd];this[rnd]=swap;
- }
- return this
- }
- var tstart=new Date().getTime();
- array1.Random();
- var tend=new Date().getTime();
- alert("花费时间为 "+(tend-tstart)+" 毫秒")
- //3.抽取
- var array1=new Array();
- for(var i=0;i<10000;i++){
- array1[i]=i;
- }
- Array.prototype.Random=function()
- {
- var ret=new Array(0);
- for(var i=this.length;i>0;i--){
- var rnd=Math.floor(Math.random()*this.length);
- ret[ret.length]=this[rnd];
- this.splice(rnd,1);
- }
- return ret;
- }
- var tstart=new Date().getTime();
- array1.Random();
- var tend=new Date().getTime();
- alert("花费时间为 "+(tend-tstart)+" 毫秒")
做完实验,第2个最快,第3个最慢,基本上第3个速度比第一个慢10倍,第一个比第2个慢10倍.