1.1常数循环
//计算复杂度
void Func4(int k)
{
int count=0;
for(intk=0;k<100;++k)
{
++count;
}
printf("%d\n",count);
}时间复杂度为:O(1)
注:O(1)不是代表算法只能运行一次,是常数次
1.2strchr的时间复杂度
//计算strchar的时间复杂度
const char* strchr(const char* str,int character)strchr主要用来查找字符串中的某个字符
while(*str)
{
if(*str==character)
return str;
else
++str;
}假设在一串字符“hello world”中分别查找h w d 三个字符
所以也分为三种情况:最好 平均 最坏
O(1) O(N/2) O(N)
注:当一个算法随着输入的不同,时间复杂度做悲观的预期,看最坏的情况
所以该算法的时间复杂度为O(N)
1.3冒泡排序的时间复杂度
//计算BubbleSort的时间复杂度?
void BubbleSort(int* a,int n)
{
assert(a);
for(size_t end=n;end>0;--end)
{
int exchange=0;
for(size_t=1;i<end;++i)
{
if(a[i-1]>a[i])
{
Swap(&a[i-1],&a[i]);
exchange=1;
}
}
if(exchange==0)
break;
}
}精确:F(N)=N*(N-1)/2
时间复杂度:O(N^2)
1.4二分查找
//计算BinarySearch的时间复杂度
int BinarySearch(int* a,int n,int x)
{
assert(a);
int begin=0;
int end=n-1;
while(begin<end)
{
int mid=begin+((end-begin)>>1);
if(a[mid]<x)
begin=mid+1;
else if(a[mid]>x)
end=mid;
else
return mid;
}
return -1;
}时间复杂度:O(log2N)
简单介绍一下二分查找的威力之大:
N个数中查找: 大概查找次数:
- 1000 10
- 100万 20
- 10亿 30
解释:2t=N 210=1024 220=210*210大概就等于十万
本文详细分析了常数循环、strchr、冒泡排序和二分查找等基本IT算法的时间复杂度,强调了O(1)、O(N)、O(N^2)和O(log2N)在不同情况下的表现,展示了算法效率的关键指标。
2204

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



