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

//比较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)

  

posted @ 2015-12-03 12:27  无工时代  阅读(411)  评论(0编辑  收藏  举报