zoukankan      html  css  js  c++  java
  • 算法 插入排序 的 JS实现及时间复杂度分析

    js实现插入排序:

    let cards=[1,2,7,8,9,0,6,3,7];
    
    //算法时间复杂度分析
    
    let firstCard=cards[0];                         //1
    
    for(let i=1;i<cards.length;i++){                //2
    
        let currentCard=cards[i];                   //3
    
        let j=i-1;                                  //4
    
        while(j>-1&&cards[j]>currentCard){          //5
    
            cards[j+1]=cards[j];                    //6
    
            j--;                                    //7
        }
    
        cards[j+1]=currentCard;                     //8
    
    }
    
    console.log(cards);

    插入排序算法时间复杂度分析

    设cards的长度为n

    语句序号 消耗 执行次数
    1 c1 1
    2 c2 n
    3 c3 n-1
    4 c4 n-1
    5 c5 这里写图片描述
    6 c6 这里写图片描述
    7 c7 这里写图片描述
    8 c8 n-1
    消耗的时间T(n)=c1+c2n+c3(n-1)+c4(n-1)+c5这里写图片描述+c6这里写图片描述+c7这里写图片描述+c8(n-1)

    当为最佳情况即cards为一个已排好顺序的数组,此时公式变为
    T(n)=c1+c2n+c3(n-1)+c4(n-1)+c5(n-1)+c8(n-1)
    即T(n)=an+b

    当为最坏情况即cards为一个反序排列的数组,省去计算过程,此时公式变为
    T(n)=a这里写图片描述+bn+c

    忽略掉次要情况,最佳情况变为n,最坏情况变为这里写图片描述

    一般情况下,我们更在意平均情况,这里最坏情况接近平均情况,也就是这里写图片描述

    我们用渐进符号Θ表示插入排序时间复杂度存在的集合

    即Θ(这里写图片描述)

    渐进符号Θ解释
    Θ(g(n))相当于 存在两个常量c1和c2
    我们需要的时间复杂度集合f(n)的范围为
    c1g(n)<=f(n)<=c2g(n)

    在插入排序中也就是c1这里写图片描述<=f(n)<=c2这里写图片描述

    一般情况下我们只关注量级比如时间复杂度为Θ(n)的算法快于时间复杂度为Θ(这里写图片描述
    )的算法

  • 相关阅读:
    依赖注入模式【其他模式】
    缓存模式【其他模式】
    限流模式【其他模式】
    规范模式【其他模式】
    服务定位器【其他模式】
    原型继承模式【其他模式】
    Promise【其他模式】
    单态模式【其他模式】
    Git如何永久删除文件(包括历史记录)
    git中如何查看一个文件的修改(更新)历史
  • 原文地址:https://www.cnblogs.com/dbdb/p/7695049.html
Copyright © 2011-2022 走看看