关于多层for循环迭代的效率优化问题
今天笔试的时候遇到这么一道题目 说有上面这么循环嵌套 ,问怎么优化 并说明原因。 for(int i = 0 ; i < 1000 ;i++){ for(int j = 0; i < 100; j++){ for(int k = 0;k < 10; k++ ){ fun(i,j,k); } } } 咋一看,被这个题目蒙到了,可能是因为平时没怎么注意这些方面。因此上网找了些资料来学习一下。 对于这种多层循环的遍历,我们的一个原则是内大外小。 内大外小 for( int k=0;k <10;k++){ for(int j=0;j <100;j++){ for(int i=0;i <1000;i++){ function(i,j,k); } } } k <10;k++; 执行10次 j <100;j++ 执行10*100次 i <1000;i++ 执行10*100*1000次 function(i,j,k); 执行10*100*1000次 共执行语句数=(10+10*100+10*100*1000)*2+10*100*1000=3002020 内小外大 for( int k=0;k <1000;k++){ for(int j=0;j <100;j++){ for(int i=0;i <10;i++){ function(i,j,k); } } } k <1000;k++; 执行1000次 j <100;j++ 执行1000*100次 i <10;i++ 执行10*100*1000次 function(i,j,k); 执行10*100*1000次 共执行语句数=(1000+1000*100+10*100*1000)*2+10*100*1000=3202000 所以执行效率应该是内大外小更高一写 内小外大-内大外小=3202000条语句-3002020条语句=199980条语句