在程序中经常用到FOR循环,当一些算法实时性要求非常高时,对FOR循环的优化有时可以带来意想不到的收获。
通常使用的FOR循环语句形式有:
int i;
for (i=0;i<n;i++)
{
}
这种循环形式,我想一般人都用过,对这种循环的优化如下:
int i;
for (i=n;i>0;i--)
{
}
这里涉及到编译器对判断语句的编译,在CCS中,对于i>0使用的是AGT也即大于等于0的后缀,而对于i<n,会多执行一条减操作的语句,然后再进行比较,这样,相对于第一种循环,第二种操作将直接减少N条指令执行时间,而这时间的节约只是一个编程习惯上稍改一下即可实现的。
优化以下for循环:
for(int i=0; i <10000;i++){
for(int j=0; j <100;j++){
for(int k=0; k <10;k++){
System.out.print("out");
}
}
}
优化:
for(int i=10;i>=0;i--){
for(int j=100;j>=0;j--){
for(int k=10000;k>=0;k--){
System.out.print("out");
}
}
}
把循环次数最多的放在循环的最内层 效率会相应提高的,因为可以减少外层的判断次数。同时数字尽量和0比较,也可以加快速度。