您好,登錄后才能下訂單哦!
這篇文章主要講解了“C語言二分查找如何應用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C語言二分查找如何應用”吧!
所謂二分查找,就是要在一組有序的數列中,查找給定的數是否在此數列中。
最主要的步驟有三個:
1.確定被查找的范圍的左右下標left、right
2.根據left和right,確定中間元素的下標mid
3.根據mid鎖定的元素和查找的元素比較,確定新的查找范圍left和right
下面將用圖示和代碼來講解上面的三個步驟:
根據以上這三種情況,代碼可以寫成如下形式:
#include <stdio.h> int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 }; int left = 0, right = sizeof(arr) / sizeof(arr[0]) - 1; int x = 0,flag = 0; scanf("%d", &x);//要找的數 while (left <= right)//若要找的數在此數組中,此條件會一直成立; //若要找的數不在此數組中,最終left會大于right,從循環中跳出 { int mid = (left + right) / 2; if (x == arr[mid]) { printf("%d\n", mid); flag = 1; break; } else if (x > arr[mid]) { left = mid + 1; } else { right = mid - 1; } } if (flag == 0)//只有當要找的數在數組中找不到時flag == 0 { printf("找不到\n"); } return 0; }
總結:從上面的例子可以看出,二分法求解是一種很高效的方法,因為一次就可以排除一半的可能性。但也要注意,二分法只適用于有序數列
#include <stdio.h> int main() { int a = 0; int b = 2; if (a == 1) if (b == 2) printf("hehe\n"); else printf("haha\n"); return 0; }
在上面的代碼中,有人可能就會對else語句與哪個if語句配對產生誤解。
其實:else是和它離的最近的if匹配的。但如果是像上面那樣寫就容易引起歧義。可以寫成下面的形式:
#include <stdio.h> int main() { int a = 0; int b = 2; if (a == 1) { if (b == 2) { printf("hehe\n"); } } else { printf("haha\n"); } return 0; }
適當的使用{}可以使代碼的邏輯更加清楚。
switch允許嵌套使用
#include <stdio.h> int main() { int n = 1; int m = 2; switch (n) { case 1: m++;//m == 3 case 2: n++;//n == 2 case 3: switch (n) {//switch允許嵌套使用 case 1: n++; case 2: m++;//m == 4 n++;//n == 3 break; } case 4: m++;//m == 5, n == 3 break; default: break; } printf("m = %d, n = %d\n", m, n); return 0; }
上面代碼中,有的case語句后沒有加上break,這就會導致執行完一條沒有加break的case語句后還會執行其下面的一條case語句,可能就會導致跟我們想要的判斷輸出結果不同。因為switch更多時候執行的是條件判斷的功能,所以最好
在每一條有效的case語句后面都加上break。同時也要注意,在每個 switch 語句中都放一條default子句是個好習慣,甚至可以在后邊再加一個 break 。
感謝各位的閱讀,以上就是“C語言二分查找如何應用”的內容了,經過本文的學習后,相信大家對C語言二分查找如何應用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。