返回
二分法:JavaScript版通俗详解,告别复杂
前端
2024-02-16 22:00:58
前言
大家好,我是饼干酱,在力扣刷过700+题,虽然是个小前端,但是对算法一直很热爱。总是看到有人说不会二分,也看到过各种总结的文章,写得极其复杂,旧人懵逼,新人落泪。但是就我700+题的经验来说,二分法真的没那么难,只要你能理解它的原理,就能轻松掌握。
二分法的原理
二分法是一种在有序数组中查找特定元素的算法。它的基本思想是:将数组一分为二,然后比较目标元素与中间元素的大小。如果目标元素等于中间元素,则查找成功;如果目标元素小于中间元素,则继续在前半部分数组中查找;如果目标元素大于中间元素,则继续在后半部分数组中查找。
这样,每次比较都会将搜索范围缩小一半,从而大大提高了查找效率。二分法的平均时间复杂度为O(log n),其中n是数组的长度。
二分法的实现
在JavaScript中,可以使用以下步骤来实现二分法:
- 首先,将数组排序。
- 然后,定义两个变量,分别代表数组的左边界和右边界。
- 接下来,进入一个循环,在循环中计算出中间元素的索引。
- 比较目标元素与中间元素的大小。
- 如果目标元素等于中间元素,则查找成功,返回中间元素的索引。
- 如果目标元素小于中间元素,则将右边界更新为中间元素的索引减一。
- 如果目标元素大于中间元素,则将左边界更新为中间元素的索引加一。
- 重复步骤3-7,直到找到目标元素或左边界大于右边界。
二分法的示例
下面是一个二分法的JavaScript示例,用于在一个有序数组中查找一个特定的元素:
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, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const target = 5;
const result = binarySearch(arr, target);
if (result !== -1) {
console.log(`找到了目标元素,索引为 ${result}`);
} else {
console.log("没有找到目标元素");
}
结语
二分法是一种非常高效的算法,在许多场景下都有应用。掌握二分法,可以帮助你解决许多算法问题。希望这篇文章对你的学习有所帮助。