C语言实现二分法查找算法
二分法是一种在有序数组中查找某一特定元素的搜索算法,搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较,如果在某一步骤数组为空,则代表找不到,这种搜索算法每一次比较都使搜索范围缩小一半。
以下是使用C语言实现二分法查找算法的代码:
#include <stdio.h>
int binarySearch(int arr[], int l, int r, int x) {
while (l <= r) {
int mid = l + (r - l) / 2;
// 如果x存在于中间位置
if (arr[mid] == x)
return mid;
// 如果x小于中间位置的值,那么它只能在左边的子数组中
if (arr[mid] > x)
r = mid - 1;
// 否则x可以只存在于右边的子数组中
else
l = mid + 1;
}
// 如果没有找到元素返回-1
return -1;
}
int main(void) {
int arr[] = {2, 3, 4, 10, 40};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 10;
int result = binarySearch(arr, 0, n - 1, x);
(result == -1) ? printf("元素不在数组中
")
: printf("元素在数组的索引 %d
", result);
return 0;
}
在上述代码中,我们首先定义了一个名为binarySearch的函数,该函数接受一个整数数组、左索引、右索引和要查找的元素作为参数,我们在while循环中使用二分法查找算法来查找元素,如果找到元素,我们返回其索引;如果没有找到元素,我们返回-1。
在main函数中,我们定义了一个整数数组和一个要查找的元素,然后调用binarySearch函数来查找该元素,我们打印出结果。



还没有评论,来说两句吧...