金蝶的面试题
现有代码
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);
}
}
}
有没有办法优化下,
我写的是把循环次数少的层放到外边,好像没意义呀
现有代码
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);
}
}
}
有没有办法优化下,
我写的是把循环次数少的层放到外边,好像没意义呀
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);
}
}
}减运算是不是比加要快?
for(int j=100;j>0;j--){
for(int k=10;k>0;k--){
function(i,j,k);
}
}
}试了一下确实有点效果
不过下面的好像也有效果
for(int i=10;i>0;i--){
for(int j=100;j>0;j--){
for(int k=1000;k>0;k--){
function(i,j,k);
}
}
}
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);
}
}
}
这样的话
结果不会受到什么影响的
但是效率会相应的提高
分析:
内大外小
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条语句