讓我們來看看這兩個循環:讓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循環執行更多次。
兩個循環不相同。第一個循環只在兩個條件成立時才執行。 –
使用調試器逐步完成並查看行爲的不同之處。 – chris
什麼讓你覺得它們是相同的?標籤垃圾郵件是什麼? – shmosel