这个问题与Big-O符号无关。
实际上让我感到惊讶的是。请考虑代码段:
for(int i = 0; i < 13; i++){
long beg = System.currentTimeMillis();
int k, l;
for(l = 0; l < 1000000; l++){
for(int j = 0; j < 65535; j++) {
if(pixels[j] == pixels[l])
k = j;
//j = 70000;
}
}
System.out.println(System.currentTimeMillis() - beg + " ms");
System.out.println();
}
输出是:
10 ms
30 ms
10 ms
10 ms
10 ms
10 ms
10 ms
10 ms
10 ms
10 ms
10 ms
现在,请考虑代码段:
for(int i = 0; i < 13; i++){
long beg = System.currentTimeMillis();
int k, l;
for(l = 0; l < 1000000; l++){
for(int j = 0; j < 65535; j++) {
if(pixels[j] == pixels[l])
//k = j;
j = 70000;
}
}
System.out.println(System.currentTimeMillis() - beg + " ms");
System.out.println();
}
输出为:&#34; 164596 ms&#34;等等。为什么呢?
答案 0 :(得分:2)
您每次都将j重置为0.
这意味着你有一个无限循环。
for(int j = 0; j < 65535; j++) {
//break;
j = 0;
}