


二分查找(Binary Search)是一种高效的查找算法,适用于在有序数组中快速定位目标元素。相比于线性查找,二分查找的时间复杂度为 O(log n),具有较高的效率。本文将详细介绍二分查找算法的原理、实现及其应用。
二分查找通过不断将查找范围减半,从而快速定位目标元素。其基本步骤如下:

以下是二分查找的JavaScript实现:
/** * 二分查找算法 * @param {number[]} arr - 有序数组 * @param {number} target - 目标元素 * @return {number} - 目标元素的索引,未找到返回 -1 */ function binarySearch(arr, target) { let left = 0; let right = arr.length - 1; while (left <= right) { const mid = Math.floor((left + right) / 2); if (arr[mid] === target) { return mid; // 找到目标元素 } else if (arr[mid] < target) { left = mid + 1; // 查找右半部分 } else { right = mid - 1; // 查找左半部分 } } return -1; // 未找到目标元素 } // 示例 const arr = [1, 3, 5, 7, 9, 11, 13]; const target = 7; const index = binarySearch(arr, target); console.log(index); // 输出: 3'运行
/**
* 递归实现二分查找算法
* @param {number[]} arr - 有序数组
* @param {number} target - 目标元素
* @param {number} left - 左索引
* @param {number} right - 右索引
* @return {number} - 目标元素的索引,未找到返回 -1
*/
function binarySearchRecursive(arr, target, left = 0, right = arr.length - 1) {
if (left > right) {
return -1; // 未找到目标元素
}
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) {
return mid; // 找到目标元素
} else if (arr[mid] < target) {
return binarySearchRecursive(arr, target, mid + 1, right); // 查找右半部分
} else {
return binarySearchRecursive(arr, target, left, mid - 1); // 查找左半部分
}
}
// 示例
const indexRecursive = binarySearchRecursive(arr, target);
console.log(indexRecursive); // 输出: 3
二分查找是一种高效的查找算法,通过不断将查找范围减半,可以在有序数组中快速定位目标元素。理解和掌握二分查找算法对于解决许多实际问题和优化程序性能都具有重要意义。希望本文对你理解和应用二分查找有所帮助。