//比较2中数组随机排序方法的效率 JavaScript版 //randon1思路 //当len=5时候,从0-5中随机3一个放入i=0, // 从0-3随机一个2放入i=2 // 从0-2随机一个1放入i=4 // 从0-1随机一个0放入i=1 // 从4-5随机一个5放入i=3 //当len=10时候,从0-10中随机8一个放入i=0, // 从0-8随机一个5放入i=3 // 从0-5随机一个1放入i=6 // 从0-1随机一个0放入i=9 // 从2-5随机一个4放入i=1 // 从2-4随机一个3放入i=4 // 从2-3随机一个2放入i=7 // 从4-5随机一个5放入i=2 // 从8-10随机一个9放入i=5 // 从8-9随机一个8放入i=8 //randon2思路 //只是每次把数组有效位置的最后一个元素移动到当前位置就可以了,这样算法的复杂度就降低为 O(n) ,速度大大提高。 //这种效率低 合适生成有一定规律的随机排序 function random1(l,r){ var arr=[] var len=r-l var n=0; var _sync=function(l,r){ if(r>l){ var mid=0|Math.random()*(r-l)+l if(n>=len){ n=1 } arr[n]=mid n=n+2; _sync(l,mid) _sync(mid+1,r) } } _sync(l,r) return arr } //这种效率高 完全打乱的随机排序 function random2(l,r){ var arr=[] var ourArr=[] var len=r-l //初始生成 for(var i=0;i<len;i++){ arr[i]=i } var end = len - 1; for (var n = 0; n < len; n++) { var num = 0|Math.random()*(end + 1); ourArr[n] = arr[num]; arr[num] = arr[end]; end--; } return ourArr } //执行效率 var cur1=new Date().getTime() var arr1=random1(10,5000000) var cur2=new Date().getTime() var arr2=random2(10,5000000) var cur3=new Date().getTime() console.log(cur2-cur1);//654 console.log(cur3-cur2);//341 //相差接近2倍 //console.log(arr1) //console.log(arr2)