c语言15-算法分析之时间复杂度、空间复杂度、递归打印数字、Myato的实现

算法效率分析:

在这里插入图片描述

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;
}

结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值