让我们检查两个循环:让j = 10,让key = 3 和arr[] = {1,2,3,4,5,6,7...}
在第一个循环中,我们有这样的模式:
count = 0;
while ( j >= 0 && arr[j] > key ) {
count++;
j = j-1;
}
输出每一步:
while ( /*j = */ 10 >= 0 && /*arr[10] = */ 11 > 3 ) { // TRUE
count++; // count becomes 1
j = j-1; // j becomes 9
}
while ( 9 >= 0 && 10 > 3 ) { // TRUE
count++; // count becomes 2
j = j-1; // j becomes 8
}
while ( 8 >= 0 && 9 > 3 ) { // TRUE
count++; // count becomes 3
j = j-1; // j becomes 7
}
while ( 7 >= 0 && 8 > 3 ) { // TRUE
count++; // count becomes 4
j = j-1; // j becomes 6
}
while ( 6 >= 0 && 7 > 3 ) { // TRUE
count++; // count becomes 5
j = j-1; // j becomes 5
}
while ( 5 >= 0 && 6 > 3 ) { // TRUE
count++; // count becomes 6
j = j-1; // j becomes 4
}
while ( 4 >= 0 && 5 > 3 ) { // TRUE
count++; // count becomes 7
j = j-1; // j becomes 3
}
while ( 3 >= 0 && 4 > 3 ) { // TRUE
count++; // count becomes 8
j = j-1; // j becomes 2
}
while ( 2 >= 0 && 3 > 3 ) { // FALSE
// loop breaks: First Condition TRUE, Second Condition FALSE
}
简化输出:
// Initial count = 0, j = 10, constant key = 3, arr[] = {1,2,3,4,5,6,7...}
count = 0 j = 10 arr[10] = 11 compound condition = true
count = 1 j = 9 arr[9] = 10 compound condition = true
count = 2 j = 8 arr[8] = 9 compound condition = true
count = 3 j = 7 arr[7] = 8 compound condition = true
count = 4 j = 6 arr[6] = 7 compound condition = true
count = 5 j = 5 arr[5] = 6 compound condition = true
count = 6 j = 4 arr[4] = 5 compound condition = true
count = 7 j = 3 arr[3] = 4 compound condition = true
count = 8 j = 2 arr[2] = 3 compound condition = false
count = 8 // 8 times it looped successfully
在第二个循环中,我们有这个模式:
while (j >= 0) {
if(arr[j] > key) {
count++;
}
j = j-1;
}
使用与上述第一个循环相同的初始条件,其中 j = 10、key = 3 和 arr[] = {1,2,3,4,5,6,7...}...
让我们输出每一步:
while ( /*j = */ 10 >= 0 ) { // TRUE
if( /*arr[10] = */ 11 > 3 ) { // TRUE
count++; // count becomes 1
}
j = j-1; // j becomes 9
}
while ( 9 >= 0 ) { // TRUE
if ( 10 > 3 ) { // TRUE
count++; // count becomes 2
}
j = j-1; // j becomes 8
}
while ( 8 >= 0 ) { // TRUE
if ( 9 > 3 ) { // TRUE
count++; // count becomes 3
}
j = j-1; // j becomes 7
}
while ( 7 >= 0 ) { // TRUE
if ( 8 > 3 ) { // TRUE
count++; // count becomes 4
}
j = j-1; // j becomes 6
}
while ( 6 >= 0 ) { // TRUE
if ( 7 > 3 ) { // TRUE
count++; // count becomes 5
}
j = j-1; // j becomes 5
}
while ( 5 >= 0 ) { // TRUE
if ( 6 > 3 ) { // TRUE
count++; // count becomes 6
}
j = j-1; // j becomes 4
}
while ( 4 >= 0 ) { // TRUE
if ( 5 > 3 ) { // TRUE
count++; // count becomes 7
}
j = j-1; // j becomes 3
}
while ( 3 >= 0 ) { // TRUE
if ( 4 > 3 ) { // TRUE
count++; // count becomes 8
}
j = j-1; // j becomes 2
}
while ( 2 >= 0 ) { // TRUE
if ( 3 > 3 ) { // FALSE
count++; // count DOES NOT INCREMENT
}
j = j-1; // j becomes 1
}
while ( 1 >= 0 ) { // TRUE
if ( 2 > 3 ) { // FALSE
count++; // count DOES NOT INCREMENT
}
j = j-1; // j becomes 0
}
while ( 0 >= 0 ) { // TRUE
if ( 1 > 3 ) { // FALSE
count++; // count DOES NOT INCREMENT
}
j = j-1; // j becomes -1
}
while( -1 >= 0 ) { // FALSE
// Loop breaks since its only condition if false.
}
简化输出:
// Initial count = 0, j = 10, constant key = 3, arr[] = {1,2,3,4,5,6,7...}
count = 0 j = 10 arr[10] = 11 while condition = true | if condition = true
count = 1 j = 9 arr[9] = 10 while condition = true | if condition = true
count = 2 j = 8 arr[8] = 9 while condition = true | if condition = true
count = 3 j = 7 arr[7] = 8 while condition = true | if condition = true
count = 4 j = 6 arr[6] = 7 while condition = true | if condition = true
count = 5 j = 5 arr[5] = 6 while condition = true | if condition = true
count = 6 j = 4 arr[4] = 5 while condition = true | if condition = true
count = 7 j = 3 arr[3] = 4 while condition = true | if condition = true
count = 8 j = 2 arr[2] = 3 while condition = true | if condition = false
count = 8 j = 1 arr[1] = 2 while condition = true | if condition = false
count = 8 j = 0 arr[0] = 1 while condition = true | if condition = false
count = 8 j = -1 NO EXECUTION while condition = false | NO EXECUTION
count = 8; // 11 times it looped successfully.
这两个循环不一样,也没有相同的行为。第二个 while 循环将比第一个 while 循环执行更多次。