C语言二分查找算法:在有序数组中查找指定值
C语言二分查找算法:在有序数组中查找指定值
本篇博客展示了如何使用C语言实现二分查找算法,在一个有序数组中快速查找用户输入的目标值。
以下是完整的代码:
#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;
}
// 如果目标值在左半部分,则继续在左半部分进行二分查找
if (arr[mid] > target) {
right = mid - 1;
}
// 如果目标值在右半部分,则继续在右半部分进行二分查找
else {
left = mid + 1;
}
}
// 目标值不存在于数组中
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
int n = sizeof(arr) / sizeof(arr[0]);
int target;
printf('请输入要查找的值:');
scanf('%d', &target);
int result = binarySearch(arr, 0, n - 1, target);
if (result == -1) {
printf('目标值 %d 不存在于数组中。\n', target);
} else {
printf('目标值 %d 在数组中的索引位置为 %d。\n', target, result);
}
return 0;
}
代码解析:
-
binarySearch函数:- 接受一个有序数组
arr、查找范围的左边界left、右边界right和目标值target作为参数。 - 使用循环不断缩小查找范围:
- 计算中间元素的索引
mid。 - 如果中间元素等于目标值,则返回
mid。 - 如果目标值小于中间元素,则在左半部分继续查找,更新
right为mid - 1。 - 如果目标值大于中间元素,则在右半部分继续查找,更新
left为mid + 1。
- 计算中间元素的索引
- 如果循环结束仍未找到目标值,则返回 -1 表示目标值不存在。
- 接受一个有序数组
-
main函数:- 定义一个有序数组
arr并计算其长度n。 - 提示用户输入要查找的值,存储在变量
target中。 - 调用
binarySearch函数进行查找,将返回值存储在result中。 - 根据
result的值输出相应的查找结果:- 如果
result为 -1,则表示目标值不存在于数组中。 - 否则,输出目标值在数组中的索引位置。
- 如果
- 定义一个有序数组
注意事项:
- 以上代码假设输入的有序数组是升序排列的。如果输入数组是降序排列的,需要修改
binarySearch函数中的比较逻辑。 - 二分查找算法的效率比线性查找高很多,尤其是在大型数据集中。
希望这篇博客能够帮助你理解如何在C语言中实现二分查找算法。如果你有任何问题,请随时在下方留言。
原文地址: http://www.cveoy.top/t/topic/f4kE 著作权归作者所有。请勿转载和采集!