📅  最后修改于: 2023-12-03 15:29:37.230000             🧑  作者: Mango
二分查找,又称折半查找,是一种高效的查找算法,它只适用于有序的数组。
该算法将数组分成两半,然后查找目标元素的值与中间元素的值进行比较。如果目标值等于中间元素的值,则查找成功。否则,如果目标值小于中间元素的值,则在左半部分继续查找;如果目标值大于中间元素的值,则在右半部分继续查找。如此递归处理,直到找到目标值或把整个数组查找完。
下面是一份二分查找的Javascript实现代码,它接受一个有序数组arr和目标值target,返回目标值在数组中的索引,如果不存在则返回-1。
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
let middle = Math.floor((left + right) / 2);
if (arr[middle] === target) {
return middle;
} else if (arr[middle] < target) {
left = middle + 1;
} else {
right = middle - 1;
}
}
return -1;
}
本算法时间复杂度为O(log n),空间复杂度为O(1)。
以下代码演示了如何使用上述实现函数来查找有序数组中的目标值:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let target = 5;
let index = binarySearch(arr, target);
console.log(index); // 4
在上述示例中,有序数组arr包含数字1到9,目标值为5,将目标值传递给binarySearch函数后,它返回目标值所在数组的索引4。
二分查找适用于有序数组中的元素查找,它比线性查找更快,时间复杂度为O(log n),但需要先对数组进行排序。此外,当数组长度很大时,二分查找的时间性能会更加明显。