
#include <stdio.h>
// 二分查找函数
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;
}
// 如果中间元素小于目标值,更新左边界
else if (arr[mid] < target)
{
left = mid + 1;
}
// 如果中间元素大于目标值,更新右边界
else
{
right = mid - 1;
}
}
// 未找到目标值,返回 -1
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
int n = sizeof(arr) / sizeof(arr[0]);
//sizeof(arr) - 计算的是数组的总大小,单位是字节
//sizeof(arr[0]) - 计算的是数组元素的大小
int target = 9;
// 调用二分查找函数
int result = binarySearch(arr, 0, n - 1, target);
if (result != -1)
{
printf("目标值 %d 在数组中的索引是 %d\n", target, result);
}
els1e {
printf("目标值 %d 不在数组中\n", target);
}
return 0;
}该函数接受四个参数:一个整数数组 arr、左边界 left、右边界 right 和目标值 target。 使用 while 循环,只要左边界小于等于右边界,就继续查找。 计算中间元素的下标 mid,使用 left + (right - left) / 2 可以避免整数溢出。 比较中间元素与目标值的大小: 如果相等,返回中间元素的下标。 如果中间元素小于目标值,说明目标值可能在右半部分,更新左边界为 mid + 1。 如果中间元素大于目标值,说明目标值可能在左半部分,更新右边界为 mid - 1。 如果循环结束后仍未找到目标值,返回 -1。