折半查找法也被称为二分查找法,是一种在有序数组中查找某一特定元素的搜索算法。其基本原理是先将待搜索数组分为两半,根据元素所在的区域再进一步细分查找位置。这个过程会一直重复进行,直到找到目标元素或者搜索区间为空。下面是一个简单的折半查找法的C语言实现:
```c
#include
int binarySearch(int arr[], int left, int right, int x) {
if (right >= left) {
int mid = left + (right - left) / 2; // 避免溢出问题
if (arr[mid] == x) { // 找到目标元素
return mid;
} else if (arr[mid] > x) { // 目标元素在左半部分
return binarySearch(arr, left, mid - 1, x);
} else { // 目标元素在右半部分
return binarySearch(arr, mid + 1, right, x);
}
} else { // 未找到目标元素
return -1; // 或抛出异常,表明没有找到元素x
}
}
int main() {
int arr[] = {2, 3, 4, 10, 40}; // 已排序的数组
int n = sizeof(arr) / sizeof(arr[0]); // 元素数量
int x = 10; // 需要查找的元素值
int result = binarySearch(arr, 0, n - 1, x); // 执行二分查找法
if (result != -1) { // 如果找到了目标元素
printf("元素找到在索引 %d 处\n", result);
} else { // 如果未找到目标元素
printf("没有找到元素 %d\n", x);
}
return 0;
}
```
这段代码首先定义了一个名为 `binarySearch` 的函数来实现二分查找的逻辑,然后在 `main` 函数中创建一个有序数组和一个待查找的元素,调用 `binarySearch` 函数进行查找并打印结果。注意,二分查找的前提条件是数组必须是有序的。