二分查找(Binary Search),也称为对分查找或折半查找,是一种在有序数组中查找特定元素的高效搜索算法。二分查找的基本思想是将目标值与数组的中间元素进行比较,如果目标值等于中间元素,则找到目标值;如果目标值小于中间元素,则在数组的左半部分继续查找;如果目标值大于中间元素,则在数组的右半部分继续查找。这个过程不断重复,直到找到目标值或确定目标值不存在于数组中。
二分查找的基本步骤如下:
迭代实现:
binary_search接收两个参数:已排序的数组arr和要查找的目标值target。left为0,右边界right为数组最后一个元素的索引。while循环,当left <= right时继续查找。mid,使用left + (right - left) // 2的方式避免整数溢出。arr[mid]与目标值target:
mid。right = mid - 1。left = mid + 1。递归实现:
binary_search_recursive接收四个参数:已排序的数组arr、要查找的目标值target、左边界left和右边界right。mid。arr[mid]与目标值target:
mid。示例:给定一个已排序的数组,调用函数即可得到目标元素的索引。
二分查找的时间复杂度为O(log n),其中n是数组的长度。这使得二分查找比线性查找(时间复杂度为O(n))更加高效,特别是对于大型数据集。但是,二分查找要求数组必须是有序的,如果数组是无序的,需要先进行排序,这可能会增加额外的时间复杂度。
二分查找本身不涉及元素交换,但如果用于查找相等元素,返回的可能不是第一个出现的位置。
二分查找是一个非常重要的算法,具有以下特点:
掌握二分查找及其变种,将为你解决各种搜索和优化问题提供强大的工具。