二分法(Binary Search)是一種在有序數(shù)組中查找特定元素的搜索算法。下面是用C語言實現(xiàn)二分法的示例代碼:
#include <stdio.h>
// 二分法查找函數(shù)
int binarySearch(int arr[], int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2;
// 如果目標值等于中間值,直接返回
if (arr[mid] == target) {
return mid;
}
// 如果目標值小于中間值,在左半部分繼續(xù)查找
if (arr[mid] > target) {
right = mid - 1;
}
// 如果目標值大于中間值,在右半部分繼續(xù)查找
if (arr[mid] < target) {
left = mid + 1;
}
}
// 目標值不存在于數(shù)組中,返回-1
return -1;
}
int main() {
int arr[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
int target = 23;
int arrSize = sizeof(arr) / sizeof(arr[0]);
// 在有序數(shù)組中查找目標值
int result = binarySearch(arr, 0, arrSize - 1, target);
if (result == -1) {
printf("目標值 %d 不存在于數(shù)組中\(zhòng)n", target);
} else {
printf("目標值 %d 存在于數(shù)組中,索引為 %d\n", target, result);
}
return 0;
}
以上代碼中,我們定義了一個binarySearch()
函數(shù)來實現(xiàn)二分法查找。首先傳入有序數(shù)組、左邊界、右邊界和目標值作為參數(shù)。在函數(shù)內(nèi)部,通過不斷調(diào)整左邊界和右邊界的值,每次取中間值與目標值進行比較,直到找到目標值或者左邊界大于右邊界為止。
在main()
函數(shù)中,我們定義了一個有序數(shù)組arr
,并將目標值target
設(shè)置為23。然后調(diào)用binarySearch()
函數(shù)來查找目標值在數(shù)組中的索引。最后,根據(jù)返回的結(jié)果輸出相應(yīng)的信息。
以上代碼輸出結(jié)果為:目標值 23 存在于數(shù)組中,索引為 5。表示目標值23在數(shù)組中的索引為5。