常见的时间复杂度
常数阶 O(1) 顺序语句
int sum = 0, n = 100; sum = (1+n)*n/2;
线性阶 O(n) FOR循环
int i, sum = 0, n = 100;
for( i=1; i <= n; i++ )
{
sum = sum + i;
}
平方阶 O(n^2) 嵌套的FOR循环
int i, j, x=0, sum=0, n=100;
for( i=1; i <= n; i++ )
{
for( j=1; j <= n; j++ )
{
x++;
sum = sum + x;
}
}
int factorial(int n)
{
if(n <= 1)
{
return 1;
}
else
{
return n*factorial(n-1);
}
}
对数阶 O(logn)
int i = 1, n = 100;
while( i < n )
{
i = i * 2;
}
nlogn阶 O(nlogn)
立方阶 O(n^3)
指数阶 O(2^n)
常用的时间复杂度消耗的时间从小到大以此是O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
请给出一下代码的时间复杂度
int factorial(int n)
{
if(n <= 1)
{
return 1;
}
else
{
return factorial(n-1)*factorial(n-2);
}
}
n++;
function(n);
for(i=0; i < n; i++)
{
function(i);
}
for(i=0; i < n; i++)
{
for(j=i; j < n; j++)
{
printf(“%d”, j);
}
}
void function(int count)
{
int j;
for(j=count; j < n; j++)
{
printf(“%d”, j);
}
}
int i, j, x=0, sum=0, n=100;
for( i=1; i <= n; i++ )
{
for( j=i; j <= n; j++ )
{
x++;
sum = sum + x;
}
}
344

被折叠的 条评论
为什么被折叠?



