二分查找
二分查找也叫折半查找,是一种在有序数组中查找特定元素的算法。基本思想是将查找区间一分为二,然后确定目标值可能存在的区间,不断缩小区间直到找到目标值为止。
具体实现是先将数组排序,然后选取中间元素,如果中间元素等于目标值,直接返回;如果中间元素大于目标值,则在左半部分查找;如果中间元素小于目标值,则在右半部分查找。
以下是二分查找的C语言实现示例:
#include <stdio.h>
int binarySearch(int arr[], int left, int right, int key) {
if (right >= left) {
int mid = left + (right - left) / 2;
if (arr[mid] == key) {
return mid;
}
if (arr[mid] > key) {
return binarySearch(arr, left, mid - 1, key);
}
return binarySearch(arr, mid + 1, right, key);
}
return -1;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 5;
int result = binarySearch(arr, 0, n - 1, key);
if (result == -1) {
printf("Element is not present in array\n");
} else {
printf("Element is present at index %d\n", result);
}
return 0;
}
该示例代码实现了一个二分查找函数,接受一个已经排好序的整数数组、数组左右边界和要查找的元素。返回元素在数组中的索引,如果没有找到则返回-1。
主函数展示了如何调用二分查找函数,在一个包含10个元素的整数数组中查找数字5的位置。