C語言數據結構之二分法查找詳解
問題:在有序數組中查找給定元素的下標goal。
在查找一個數組元素的下標,可以用循環來解決,但是如果一個數足夠大,比如說手機的價格,用循環來查找,就相當於叫一個人猜,從0開始,需要猜很久。這時候就出現瞭二分查找,也叫對半查找。
對半查找顧名思義就是猜一次,下次猜的內容就減少一半
這時候定義一個變量left表示最左邊元素的下標,在定義一個right表示最右邊元素的下標,而mid就表示中間元素的下標。
當中間值小於目標值,left重新定義。
if (mid < goal) { left = mid + 1; }
當中間值大於目標元素,right重新定義。
else if (mid > goal) { right = mid - 1; }
當中間元素等於目標元素時,打印即可。
else { printf("你找到瞭,下標為:%d", mid); break; }
這中查找方式可能會使用多次,這時候來一個while循環就可以重復查找的撒
如果最後數組元素找不到對應的元素,就在while循環外打印出找不到。
if (left > right) printf("找不到");
最後代碼如下:
#include<stdio.h>//在數組中找到某個數,二分查找 int main() { int goal = 7; int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int sz = sizeof(arr) / sizeof arr[0]; int left = 0; int right = sz - 1; while (left <= right) { int mid = (left + right) / 2; if (mid < goal) { left = mid + 1; } else if (mid > goal) { right = mid - 1; } else { printf("找到瞭,下標為:%d", mid); break; } } if (left > right) printf("找不到"); return 0; }
到此這篇關於C語言數據結構之二分法查找詳解的文章就介紹到這瞭,更多相關C語言 二分法查找內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!