如何判断for循环的效率

如何判断for循环的效率,第1张

通常我们在编写需要for循环实现的程序时有两种实现方法:

for(int i = 0i<arr.lengthi++)

for(int i = arr.length-1i>=0i--)

分析:

结论:通常来讲第2种用–的方法效率更高

原因如下:

在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。

第2种方法和0比较作为判读,很多cpu和0比较可以减少1个指令.

参考:

i– *** 作本身会影响CPSR(当前程序状态寄存器),CPSR常见的标志有N(结果为负), Z(结果为0),C(有进位),O(有溢出)。i >0,可以直接通过Z标志判断出来。

i++ *** 作也会影响CPSR(当前程序状态寄存器),但只影响O(有溢出)标志,这对于i <n的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。

考虑使用情况的话:arr.length可能会变化, 所以有可能比较时每次都要从arr里面取length的值.是一个问题。

所以有:

1,for(int i = 0i<arr.lengthi++) 最耗时,

2,for(int i=0,len=list.size()i<leni++) 次之,

3, for(int i = arr.length-1i>=0i--) 最快

1,最耗时不需多言,

2与3 基本上差距在10%之内

总结:(针对上边三种方法)

如果arr.length需要变化则使用++,否则使用–。

至于把arr.length保存到静态变量,前一种情况下不可能,后一种情况下则没必要

(1)优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;少用子查询可用表连接代替;少用模糊查询,数据表中创建索引。

(2)对程序中经常用到的数据生成缓存(如使用redis缓存数据等)。

(3)对mysql做主从复制,读写分离。从而提高mysq执行效率和查询速度。

(4)使用nginx做负载均衡。将访问压力平均分配到多态服务器。

从机器的硬件性能上讲,循环的效率高一些。

递归涉及到的内存 *** 作肯定要比循环复杂,最主要的就是递归调用函数中的变量的压栈、出栈 *** 作,如果递归的层次太多肯定会导致内存溢出、系统崩溃。例如:计算 n !,如果 n 太大了的话,就不能够使用递归的方法来实现了。就必须将递归的方法修改为非递归方式,这个现在在数据结构教材上都会有讲解的。当然了,递归的最大好处就是:编写代码简单,程序可读性好。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7961099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存