折半查找法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) {
right = mid - 1;
}
// 如果目标值在中间元素的右侧,缩小左边界
else if (arr[mid] < target) {
left = mid + 1;
}
// 如果中间元素就是目标值,返回索引
else {
return 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, 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
作为参数。在函数中,我们使用一个循环来不断缩小搜索范围,直到找到目标值或搜索范围为空。
在main
函数中,我们定义了一个已排序的整数数组arr
,并计算数组的长度n
。然后,我们调用binarySearch
函数来查找目标值target
在数组中的索引。最后,根据返回的结果,我们打印出相应的提示信息。
在这个示例中,目标值12
存在于数组中,因此输出为"目标值 12 存在于数组中,索引为 5"。
折半查找法(Binary Search)是一种高效的查找算法,适用于已排序的数组。它的基本思想是将数组分成两部分,然后通过比较目标值与中间元素的大小关系,来确定目标值可能存在的区间,然后再在该区间内进行查找,不断缩小搜索范围,直到找到目标值或搜索范围为空。
以下是折半查找法的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;
}
// 如果目标值在中间元素的左侧,缩小右边界
else if (arr[mid] > target) {
right = mid - 1;
}
// 如果目标值在中间元素的右侧,缩小左边界
else {
left = mid + 1;
}
}
// 如果没有找到目标值,返回-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, 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
作为参数。在函数中,我们使用一个循环来不断缩小搜索范围,直到找到目标值或搜索范围为空。
在main
函数中,我们定义了一个已排序的整数数组arr
,并计算数组的长度n
。然后,我们调用binarySearch
函数来查找目标值target
在数组中的索引。最后,根据返回的结果,我们打印出相应的提示信息。
在这个示例中,目标值12
存在于数组中,因此输出为"目标值 12 存在于数组中,索引为 5"。如果目标值不存在于数组中,输出为"目标值 12 不存在于数组中"。