zoukankan      html  css  js  c++  java
  • 比较两种数组随机排序方法的效率 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)
    

      

  • 相关阅读:
    请求内部转发与重定向区别
    JSTL标签
    JSP学习总结
    JSP执行过程
    Cookie实现--用户上次访问时间
    python 关键知识点
    PIL 学习
    python 与 matlab 混编
    matplotlib 中文显示 的问题
    中文文本分类1
  • 原文地址:https://www.cnblogs.com/caoke/p/5015816.html
Copyright © 2011-2022 走看看