算法效率分析:
1、算法分析之时间复杂度
规则:
1、只保留高阶项;
2、不要系数;
O(1):常数项;
O(n^1/2) != O(n);
例子分析:
1)
对于这个循环函数,最基本的语句为:c[i][j]=0
其执行次数为:
2)
O(n^3)
3)
O(1)—常数项
4)
O(n)
5)
O(n^2)
6)
O(logn)
7)
判断素数函数:
O(n^1/2)
8)
O(n)
9)
O(log2_n)
2、空间复杂度
实现这个算法所需要的额外的辅助空间和问题规模之间的函数关系;
例子:
1)
O(1):
2)递归:
O(n)
3)
O(n)
4)
时间复杂度:O(n^2)
空间复杂度:O(1)
3、递归打印数字
顺序输出n的每一位数字:483–》4 8 3
Show(n):顺序输出n
Show(n/10):顺序输出n非个位
void Show(int n)
{
if(n < 10)
printf("%d ",n);
else
{
Show(n/10);
printf("%d ",n%10);
}
}
int main()
{
Show(0);
printf("\n");
Show(1);
printf("\n");
Show(483);
printf("\n");
Show(15465);
return 0;
}
4、Myato的实现
库函数:atoi
判断是否为数字函数:
注意返回值
库函数:isdigit()
||||
数字字符转数字:
字符-‘0’
代码:
//将字符串转成数字"123"-->123
int Myatoi(const char *str)
{
assert(str != NULL);
if(str == NULL)
return 0;
//处理前面的空格
while(*str == ' ')
str++;
//处理符号
int flg =1;
if(*str == '-')
{
flg = -1;
str++;
}
else if(*str =='+')
{
flg = 1;//可省略
str++;
}
int tmp = 0;
while(isdigit(*str))//"123"-->123:'1'->1 ?? '1'-'0'==1;'2'-'0'==2
{
tmp =tmp*10 + (*str-'0');
str++;
}
return tmp*flg;
}
int main()
{
printf("%s--->%d\n"," -2309",Myatoi(" -2309"));
printf("%s--->%d\n","31412764",Myatoi("31412764"));
printf("%s--->%d\n","3141ab2764",Myatoi("3141ab2764"));
//printf("%s--->%d\n","33364027351717160320",Myatoi("33364027351717160320"));
return 0;
}