关于算法的时间复杂度
看了一些书,大致明白了一点点有关时间复杂度,想在这里请教各位。比如说
for(int i=0;i<n;i++)
{
do...
}
这个的时间复杂度为o(n)吧?
另
for(int i=0;i<n;i++)
for(int j=0;j<n-1;i++)
{
do...
}
这个的时间复杂度为o(n^2)吧?(n 的平方)
再比如说一个折半查找算法:
void sort(int a[],int n,int x)
{
int left=1;
int right=n;
int mid;
int flag=0;
while((!flag)&&(left<=right))
{
mid=(left+right)/2;
if(x==a[mid])
{
printf("%d is the %d\n",x,mid);
flag=1;
}
else if (x>a[mid])
left=mid+1;
else right=mid-1;
}
}
这个的时间复杂是要怎么算的?
它跟for循环有什么关系没有?比如如果有三个for语句,是不是就是o(n^3)?
还有,那些时间复杂度为o(log n)的和o(2^n)的是什么样的算法呢?