算法 插入排序 的 JS实现及时间复杂度分析

来源:互联网 发布:mac图片压缩软件 编辑:程序博客网 时间:2024/05/16 04:22

js实现插入排序:

let cards=[1,2,7,8,9,0,6,3,7];//算法时间复杂度分析let firstCard=cards[0];                         //1for(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)的算法快于时间复杂度为Θ(这里写图片描述
)的算法

阅读全文
0 0
原创粉丝点击