c语言 折半法代码
时间: 2025-07-07 16:41:41 浏览: 7
### C语言实现折半法(二分法)代码示例
折半查找法(二分查找法)是一种高效的查找算法,适用于有序数组的查找操作。以下是使用C语言实现折半查找法的完整代码示例:
```c
#include <stdio.h>
// 定义一个函数用于折半查找
int BinarySearch(int arr[], int n, int target) {
int low = 0; // 定义数组的起始索引
int high = n - 1; // 定义数组的结束索引
while (low <= high) { // 当起始索引小于等于结束索引时循环
int mid = low + (high - low) / 2; // 计算中间索引,避免溢出[^2]
if (arr[mid] == target) { // 如果中间值等于目标值,则返回索引
return mid;
} else if (arr[mid] < target) { // 如果中间值小于目标值,调整起始索引
low = mid + 1;
} else { // 如果中间值大于目标值,调整结束索引
high = mid - 1;
}
}
return -1; // 如果未找到目标值,返回-1表示查找失败
}
int main() {
int arr[] = {13, 27, 38, 49, 49, 65, 76, 97}; // 已排序的数组
int n = sizeof(arr) / sizeof(arr[0]); // 数组长度
int target;
printf("请输入要查找的目标值:\n");
scanf("%d", &target);
int result = BinarySearch(arr, n, target); // 调用折半查找函数
if (result != -1) {
printf("目标值 %d 在数组中的索引为:%d\n", target, result);
} else {
printf("目标值 %d 不在数组中。\n", target);
}
return 0;
}
```
#### 代码说明
1. **输入数组**:代码中使用的数组`{13, 27, 38, 49, 49, 65, 76, 97}`是已经排好序的数组,这是折半查找的前提条件。
2. **函数实现**:`BinarySearch`函数实现了折半查找的核心逻辑,通过不断缩小查找范围来提高效率。
3. **时间复杂度**:折半查找的时间复杂度为O(log n),相较于线性查找的O(n)更加高效[^2]。
### 注意事项
- 折半查找要求输入数组必须是有序的,否则结果可能不正确。
- 如果数组中有重复元素,返回的可能是其中一个匹配元素的索引,具体取决于数据分布和实现方式[^3]。
阅读全文
相关推荐
















