日期:2014-05-20  浏览次数:20689 次

嵌套循环的优化
金蝶的面试题
现有代码
for( int i=0;i<1000;i++){
  for(int j=0;j<100;j++){
  for(int k=0;k<10;k++){
  function(i,j,k);
  }
  }



有没有办法优化下,
我写的是把循环次数少的层放到外边,好像没意义呀

------解决方案--------------------
int a = 0, b = 0, c = 0;
for (int i = 1000; i > 0; i--, a++) {
for (int j = 100; j > 0; j--, b++) {
for (int k = 10; k > 0; k--, c++) {
function(a, b, c);
}
}
}

减运算是不是比加要快?
------解决方案--------------------
通过函数的嵌套调用来解循环的嵌套。

Java code


    public void  f3(){
        for (int i = 0; i<1000; i++){
            f2(i);
        }
        
    }
    
    
    public void f2(int i){
        for (int j = 0; j<100; j++){
            f1(j);
        }
        
    }
        
    public void f1(int j){
        for (int k = 0; k<10; k++){
         function(i,j,k); 
             
        
        }
    }

------解决方案--------------------
把循环次数最多的放在循环的最内层
效率会相应提高的

for( int k=0;i <10;k++){ 
for(int j=0;j <100;j++){ 
for(int i=0;i <1000;i++){ 
function(i,j,k); 


}
这样的话
结果不会受到什么影响的
但是效率会相应的提高