比较两种数组随机排序方法的效率 JavaScript版

时间:2023-01-02 16:48:20
//比较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)