链接:直接插入排序的平均时间复杂度为( )。__牛客网
来源:牛客网
一、时间复杂度:
(1)定义:
时间复杂度是用来定性描述算法执行所需要的时间。现假设问题规模为n,解决该问题的算法中基本操作重复执行的次数是T(n)。如果有一个辅助函数f(n)使得T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,因此有T(n)=O(f(n)),此时O(f(n))称为算法的渐进时间复杂度,简称时间复杂度。时间复杂度越高,算法的执行效率越低。
(2)计算方法:
1)首先找出算法中所有重复执行的基本操作并确定总的的执行次数T(n);
2)然后找出T(n)的同数量级函数f(n);
3)最后时间复杂度是O(f(n))。
技巧:
1)一重循环的时间复杂度为O(n),两重循环的时间复杂度为O(n^2),三重循环的时间复杂度为O(n^3),依次类推;
2)二分的时间复杂度为O(logn);
3)一个循环里套一个二分的时间复杂度为O(nlogn)。
(3)举例说明:
for (i = 1; i <= n; i++)
{
for(j = 1;j <= n;j++)
{
printf(“%d,%d”,i,j);
for (k =1;k <= n; k++)
{
printf(“%d,%d,%d”,i,j,k);
}
}
}
1)
第一个重复执行的基本操作printf(“%d,%d”,i,j),它的执行次数是n^2;
第二个重复执行的基本操作printf(“%d,%d,%d”,i,j,k),它的执行次数是n^3;
总的执行次数是T(n) = n^2 + n^3。
2)
T(n)的同数量级函数是n^3。
3)
时间复杂度是O(n^3)
(4)影响算法时间复杂度的因素:
1)算法本身
2)问题规模
3)数据的初始状态
二、排序算法