- Published on
二分查找算法
- Authors
- Name
- 谢克成
二分查找算法
二分查找算法(Binary Search)是一种高效的搜索算法,用于在有序数组中查找特定元素。它的核心思想是通过将查找区间逐步缩小一半,从而快速定位目标元素的位置。以下是 JavaScript 版本的二分查找算法的概要总结:
算法步骤:
- 确定查找区间的起始和结束位置:将起始位置
low
初始化为 0,将结束位置high
初始化为数组长度减 1。 - 进入循环:使用循环(通常是
while
循环)来执行以下步骤,直到查找区间为空或者找到目标元素。 - 计算中间位置:计算中间位置
mid
,可以通过(low + high) / 2
来获取。这将帮助确定下一步是在左半部分还是右半部分查找。 - 比较目标元素:将目标元素与位于中间位置的元素进行比较。
- 如果目标元素等于中间位置的元素,查找成功,返回中间位置。
- 如果目标元素小于中间位置的元素,说明目标元素位于左半部分,将
high
更新为mid - 1
。 - 如果目标元素大于中间位置的元素,说明目标元素位于右半部分,将
low
更新为mid + 1
。
- 重复步骤 2-4,直到查找区间为空或找到目标元素为止。
算法特点:
- 二分查找算法适用于有序数组,因为它利用了数组的有序性来减少搜索范围。
- 它的时间复杂度为 O(log n),其中 n 是数组的长度。这使得它比线性搜索更加高效,特别是对于大型数组。
- 二分查找要求数组中的元素是可比较的,因此适用于基本数据类型和自定义对象(需要提供比较函数)。
JavaScript 示例代码:
function binarySearch(arr, target) {
let low = 0
let high = arr.length - 1
while (low <= high) {
let mid = Math.floor((low + high) / 2)
if (arr[mid] === target) {
return mid // 找到目标元素,返回索引
} else if (arr[mid] < target) {
low = mid + 1 // 在右半部分查找
} else {
high = mid - 1 // 在左半部分查找
}
}
return -1 // 没有找到目标元素
}
// 示例用法
const sortedArray = [1, 3, 5, 7, 9, 11, 13, 15]
const targetElement = 7
const index = binarySearch(sortedArray, targetElement)
if (index !== -1) {
console.log(`目标元素 ${targetElement} 位于索引 ${index}`)
} else {
console.log(`未找到目标元素 ${targetElement}`)
}