js二分法查找区间代码
时间: 2023-08-31 15:39:06 浏览: 128
C和Java的二分查找代码实现
### 回答1:
以下是使用JavaScript实现二分查找的示例代码,该代码假设输入数组已经按升序排序:
```javascript
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
let 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;
}
```
这个函数接受两个参数:一个已排序的数组 `arr` 和目标元素 `target`。在函数体内,我们使用 `left` 和 `right` 变量来跟踪数组的边界。在每次循环中,我们计算中间索引 `mid`,然后检查该元素是否等于目标元素。如果相等,我们就返回它的索引。如果不相等,我们根据 `mid` 与 `target` 的关系更新 `left` 和 `right` 变量,从而缩小搜索范围。
如果目标元素不在数组中,则函数返回 -1。
### 回答2:
二分法查找是一种常用的查找算法,它可以在有序数组中快速定位某个特定元素的位置。
下面是用JavaScript实现二分法查找区间代码的示例:
```javascript
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
let 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;
}
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let target = 6;
let result = binarySearch(arr, target);
console.log(result); // 输出6,表示目标元素6在数组中的索引位置
```
这段代码中,`binarySearch`函数接受一个有序数组`arr`和目标元素`target`作为输入参数。首先,我们定义了两个指针`left`和`right`,分别指向数组的起始位置和结束位置。接着,使用`while`循环来迭代查找。在每次迭代中,计算中间位置`mid`,然后比较`arr[mid]`与目标元素`target`的大小关系。如果`arr[mid]`等于`target`,则返回`mid`作为结果;如果`arr[mid]`小于`target`,则更新左指针`left`为`mid + 1`;如果`arr[mid]`大于`target`,则更新右指针`right`为`mid - 1`。直到找到目标元素或者左指针与右指针相遇,循环结束。
这段代码的时间复杂度是O(log n),其中n是数组的长度。由于每次迭代都将查找区间缩小一半,因此二分法查找算法的效率非常高。
阅读全文