📅  最后修改于: 2023-12-03 15:29:43.677000             🧑  作者: Mango
编写一个程序,用二进制查找算法查找数组中的元素。如果找到元素,输出其下标;否则,输出提示信息表示未找到。
二进制查找算法,也称折半查找算法,基于有序数组中值的不断二分为基础,时间复杂度为O(log n)。首先,检查数组的中间元素。如果需要查找的元素小于这个值,则进一步搜索左侧的子数组;如果需要查找的元素大于这个值,则进一步搜索右侧的子数组。不断重复这个过程,直到找到需要查找的元素或者直到搜索整个数组。
low
和 high
分别表示搜索区间的开始和结束位置;#include <stdio.h>
int binary_search(int arr[], int n, int target) {
int low = 0, high = n-1, mid;
while (low <= high) {
mid = (low + high) / 2;
// 如果查找到目标值,返回其下标
if (arr[mid] == target) {
return mid;
}
// 如果目标值小于当前中间值,向左搜索子数组
else if (arr[mid] > target) {
high = mid - 1;
}
// 如果目标值大于当前中间值,向右搜索子数组
else {
low = mid + 1;
}
}
// 未找到目标值,返回 -1
return -1;
}
int main() {
int arr[] = {1, 2, 4, 6, 8, 10, 12};
int n = sizeof(arr) / sizeof(int);
int target = 8;
int idx = binary_search(arr, n, target);
if (idx == -1) {
printf("未找到 %d\n", target);
}
else {
printf("%d 的下标为 %d\n", target, idx);
}
return 0;
}
二进制查找算法是一种高效的搜索算法,对于有序数组来说,相比于线性搜索算法可以减少搜索时间,提高搜索效率。可以使用递归或迭代方式实现,需要注意边界情况和收敛条件的判断。