在计算机科学中,二分查找是一种在有序数组中查找特定元素的搜索算法。也被称为“折半查找”或“对数查找”。该算法从数组的中间元素开始搜索,如果中间元素正好是要查找的元素,则搜索过程结束。如果某个特定元素大于或小于中间元素,则在数组大于或小于中间元素的那一半中继续搜索,而且不必再搜索另一半。
二分查找算法如下: 1.将所搜索区域的中间项确定为关键字与所搜索关键字进行比较; 2.根据比较结果, 将所搜索区域缩小一半, 使搜索过程逐步向所查找记录所处位置逼近; 3.重复执行第1, 2步, 直到成功找到所查记录, 或者所搜索的区域为空.
下面展示一个简单的C语言程序来演示如何使用二分查找算法:
#include
int binarySearch(int arr[], int l, int r, int x)
{
while (l <= r) {
int m = l + (r - l) / 2;
// Check if x is present at mid
if (arr[m] == x)
return m;
// If x greater, ignore left half
if (arr[m] < x)
l = m + 1;
// If x is smaller, ignore right half
else
r = m - 1;
}
// if we reach here, then element was not present
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("Element is not present in array")
: printf("Element is present at index %d",
result);
return 0;
}
这个程序实现了一个名为binarySearch的函数,它接收一个整数数组、搜索范围的左右索引和要查找的元素。在while循环中,我们计算出中间索引m,检查arr[m]是否等于x。如果是,则返回m。否则,如果arr[m]小于x,则我们可以忽略左半部分,并更新l为m+1;否则,我们可以忽略右半部分,并更新r为m-1。如果while循环结束时仍未找到元素,则返回-1表示未找到。
这就是使用C语言实现二分查找算法的基本步骤。通过理解此程序,您将能够编写自己的二分查找算法来在有序数组中搜索特定元素。