C语言实现折半查找算法:详解与示例代码
#include <stdio.h>
// 折半查找算法
int binarySearch(int arr[], int n, int target) {
int left = 0;
int right = n - 1;
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;
}
}
return -1;
}
int main() {
int arr[] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 12;
int result = binarySearch(arr, n, target);
if (result == -1) {
printf('Element not found\n');
}
else {
printf('Element found at index %d\n', result);
}
return 0;
}
运行结果:
Element found at index 5
代码解析:
- 函数
binarySearch: 接受一个有序数组arr、数组长度n和目标值target作为参数。 - 循环查找: 使用
while循环,当左边界left小于等于右边界right时执行查找。 - 计算中间位置: 在每次迭代中,计算中间位置
mid。 - 比较: 将目标值
target与中间元素arr[mid]进行比较:- 如果相等,则找到目标值,返回索引
mid。 - 如果目标值小于中间元素,则在左半部分继续查找,更新
right为mid - 1。 - 如果目标值大于中间元素,则在右半部分继续查找,更新
left为mid + 1。
- 如果相等,则找到目标值,返回索引
- 未找到: 如果循环结束仍未找到目标值,则返回
-1表示查找失败。
总结:
折半查找是一种高效的搜索算法,适用于有序数组。其时间复杂度为O(log n),比线性搜索更快。本示例代码演示了如何使用C语言实现折半查找算法,并提供了详细的代码解析和运行结果。
原文地址: https://www.cveoy.top/t/topic/f3YQ 著作权归作者所有。请勿转载和采集!