#include <stdio.h>
// 折半查找算法
int binary_search(int arr[], int n, int target) {
// 定义最低和最高的查找范围
int low = 0;
int high = n - 1;
// 当最低和最高的查找范围重叠时结束循环
while (low <= high) {
// 计算中间元素的下标
int mid = (low + high) / 2;
// 如果中间元素就是要查找的元素,则返回 1 (表示存在)
if (arr[mid] == target) {
return 1;
} else if (arr[mid] < target) { // 如果中间元素比要查找的元素小,则将查找范围缩小到右半部分
low = mid + 1;
} else { // 如果中间元素比要查找的元素大,则将查找范围缩小到左半部分
high = mid - 1;
}
}
// 如果整个数组都搜索完了都没有找到要查找的元素,则返回 0 (表示不存在)
return 0;
}
int main() {
// 定义数组、数组长度和要查找的元素
int arr[] = {6, 17, 25, 34, 52, 63, 85};
int len = sizeof(arr) / sizeof(arr[0]);
int key = 6;
// 调用折半查找算法,如果返回 1 则表示存在,否则表示不存在
if (binary_search(arr, len, key)) {
printf("%d存在于数组中\n",key);
} else {
printf("%d不存在于数组中\n",key);
}
return 0;
}